저는 Apache Commons Net 3.3을 사용하여 Java 응용 프로그램에서 FTP 전송을 처리하고 있습니다.Apache Commons Net 느린 FTP 업로드
다운로드는 정상적으로 작동하지만 업로드 속도가 로컬 인터넷 연결 속도보다 훨씬 느립니다.
스트림에 파일 데이터를 기록하는 코드는 다음과 같습니다
BufferedOutputStream out = new BufferedOutputStream(ftp.getOutputStream(prt));
BufferedInputStream in = new BufferedInputStream(prov.getInputStream(s));
byte[] buff = new byte[BUFF_SIZE];
int len;
while ((len = in.read(buff)) >= 0 && !prog.isCanceled()) {
out.write(buff, 0, len);
total += len;
prog.setProgress((int) (Math.round((total/combo) * 100)));
}
in.close();
out.close();
BUFF_SIZE = 16kB의 나는 FTPClient 버퍼 크기는 16kB의로 설정 한
문제 setBufferSize
를 통해 업로드가 Filezilla를 FTP 클라이언트로 사용하여 훨씬 더 합리적인 속도로 진행되기 때문에 서버 또는 인터넷 연결에 포함되지 않습니다.
또한 Java 6 및 7 JVM에서 발생하는 것으로 보입니다.
왜 이런 일이 발생했는지에 대한 아이디어가 있습니까? Commons Net이나 Java에 문제가 있습니까? 아니면 올바르게 구성되지 않은 것이 있습니까?
내가이 고정 결국했다고 생각하고, 문제가 단지와 기본적였다 해결 InputStream/OutputStream의 디폴트 구현은 매우 느리다. 어쩌면 더 많은 방법을 무시해보십시오. – bgroenks
제 경우의 문제는 내가 테스트를 위해 Virtualbox를 사용했기 때문입니다. 실제 기계에서 - 괜찮아요. 하루 종일 쓰십시오) – Grey2k