Chciałem zapytać, czy ktoś wie o jakichkolwiek problemach z Java 7 w FTP? Używałem obu bibliotek Sun Net i Apache Commons Net i obydwa działają zgodnie z oczekiwaniami w Javie 6. Ale kiedy przełączam swoje środowisko dev (Eclipse) na 1.7, te same operacje działają bardzo wolno (około 4.5 do 8KB/s), a są to serwery localhost i inny serwer w sieci LAN.Dlaczego pobieranie ftp jest powolne w java 7
Próbowałem buforowanych strumieni, transferu bajt po bajcie, wyłączając Algorytm Nagle i używając wygodnej metody Apache storeFile(), przy czym ta ostatnia w końcu osiąga prędkość na localhost, ale zwalnia ponownie do indeksowania na zdalnym serwerze. Ustawiam też wszystkie komputery, aby wyłączyć filtrowanie według protokołu 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();
}
}
Jak można zauważyć, jest to dość standardowy kod implementacyjny. Ponownie, w Javie 6, rzeczy naprawdę szybko się zepsuły. W Javie 7 zwalnia on od 10 do 20 razy w przypadku bibliotek Sun i Apache Commons. Używanie klienta FTP, takiego jak FileZilla, potwierdza, że FTP działa normalnie, więc myślę, że to naprawdę ma coś wspólnego z Javą 7. Przekopałem się tak daleko, jak mogłem w Internecie, by wspomnieć o problemie, ale przede wszystkim rzeczy, które widziałem, były o konflikt firewall Java 7 i Windows 7.
Z góry dziękujemy za wszelkie uwagi.
Pytanie: "Myślę, że to naprawdę ma coś wspólnego z Javą 7". Odp .: Naprawdę myślę, że prawdopodobnie masz rację. Spróbuj skompilować dla Java 6 i spróbuj uruchomić * ten sam * .class w obu JRE6 i JRE7. Założę się, że pewnie potwierdzisz swoją teorię :) – paulsm4
Jaka jest klasa "danych"? – DWright
Przepraszam, że tęskniłem za DWright. Próbowałem już arbitralnych typów danych od obiektów odwzorowanych hash do łańcuchów, tylko by sprawdzić, czy rzeczywiście było to przyczyną, ale wszystkie zostały przeniesione tak samo, to jest szybko w Javie 6 i powoli w Javie 7. –