项目是一个报表系统,使用apache-commons-net网络工具包实现文件上传与下载。实际测试中报表数量比较小,没有发现大问题,并且开发时也是本地开发,本地FTP服务器处理。后来测试发现,该处理使用的是单字节不刷新读取模式,一个文件如果几百M,读入缓冲字节流的数据也会在内存中占用几百个M,这一点实际开发测试可以断点调试,使用VisualVM监控即可。
查看FTP上传下载源码,发现可以再FTPClient注入缓冲字节大小,实际测试8*1024性能比较好:
ftpClient.changeWorkingDirectory(new String(path.getBytes("utf-8"), "ISO8859-1"));
ftpClient.setFileType(FTP.BINARY_FILE_TYPE);
// long start = System.currentTimeMillis();
ftpClient.setBufferSize(1024 * 8);
ftpClient.storeFile(new String(fileName.getBytes("utf-8"), "ISO8859-1"), input);
// System.out.println(System.curr