FTP に関する Java 7 の問題について知っている人はいますか? Sun Net ライブラリと Apache Commons Net ライブラリの両方を使用しましたが、どちらも Java 6 で期待どおりに動作しました。これらは localhost サーバーと LAN 内の別のサーバーに対するものです。
バッファリングされたストリーム、バイトからバイトへの転送、Nagle Algorithm をオフにして、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 のファイアウォールの競合。
与えられた洞察を前もって感謝します。