我想问是否有人知道 FTP 的任何 Java 7 问题?我使用了 Sun Net 和 Apache Commons Net 库,并且在 Java 6 上都按预期执行。但是当我将开发环境 (Eclipse) 切换到 1.7 时,相同的操作执行速度非常慢(大约 4.5 到 8KB/s),这些是本地主机服务器和局域网内的另一台服务器。
我尝试过缓冲流、字节到字节传输、关闭 Nagle 算法,并使用 Apache 便捷方法 storeFile(),后者最终在 localhost 上执行以加快速度,但在远程服务器上再次减速. 我还将所有机器都设置为关闭有状态的 FTP 过滤。
InputStream is = null;
OutputStream os = null;
try {
is = new BufferedInputStream(prepareInputStream(data));
os = new BufferedOutputStream(prepareOutputStream(data));
if (is == null || os == null) {
log.error("Can't build connection");
return;
}
byte[] buf = new byte[4096];
int c = 1;
while (c > 0) {
c = is.read(buf);
if (c > 0)
os.write(buf, 0, c);
data.incrCurrentPosition();
fireStateChanged(data);
}
data.incrCurrentPosition();
} catch (IOException e) {
log.error(e.getMessage(), e);
setEnabled(false);
} catch (Exception e) {
log.error(e.getMessage(), e);
} finally {
if (is != null) {
try {
is.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (os != null) {
try {
os.close();
} catch (IOException e) {
e.printStackTrace();
}
}
可以看出,这是非常标准的实现代码。同样,在 Java 6 中,事情进展得非常快。在 Java 7 中,Sun 和 Apache Commons 库的速度都降低了 10 到 20 倍。使用像 FileZilla 这样的 FTP 客户端可以确认 FTP 运行正常,所以我认为它确实与 Java 7 有关。我尽我所能在网上搜索任何提到的问题,但大多数情况下,我看到的都是关于Java 7 和 Windows 7 防火墙冲突。
提前感谢您提供的任何见解。