OpenJDK7 프로젝트 java.nio.file.Files에는 다음과 같은 기능이 있습니다. 내 질문은 while 루프 조건>> = 대신해야합니까? source.read의 javadoc가 EOF에 도달했을 때, 그것은 돌아갑니다 -1 당신은 잘못 읽기 기능을 찾고 있습니다 0이 아닌JDK7 Files.copy
/**
* Reads all bytes from an input stream and writes them to an output stream.
*/
private static long copy(InputStream source, OutputStream sink)
throws IOException
{
long nread = 0L;
byte[] buf = new byte[BUFFER_SIZE];
int n;
while ((n = source.read(buf)) > 0) {
sink.write(buf, 0, n);
nread += n;
}
return nread;
}
함수의 javadoc의 읽기의 javadoc에서 0을 반환하지 않기 때문에 그것이 입력에서 모든 바이트를 읽어 줄 테니 말한다 흐름. 연결 상태가 좋지 않고 다음 바이트를 즉시 사용할 수없는 경우 모든 바이트를 반입하기 전에 while 루프가 종료됩니다. 그렇지 않니? – tanyehzheng
@tanyehzheng 그건 잘못되었습니다. ['InputStream.read'] (http://docs.oracle.com/javase/7/docs/api/java/io/InputStream.html#read (byte []))에 대한 javadocs는 적어도 하나의 바이트 그렇지 않으면 블록됩니다. 첫 번째 바이트가 EOF 외의 이유로 읽을 수없는 경우 'IOException'을 발생시킵니다. 이 함수에 대해 0을 리턴하는 스트림은 모두 잘못 쓰여지고'InputStream'의 서브 클래스를 적절하게하지 않습니다. (버퍼가 길이가 0 인 배열을 제외하면.) – Brian