在OpenJDK7項目java.nio.file.Files中,有以下功能。我的問題是,如果while循環條件是> =而不是>?這是因爲source.read的javadoc說達到EOF時,它會返回-1而不是0JDK7 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說,它會從輸入讀取所有字節流。如果連接不良,下一個字節可能不會立即可用,則while循環將在獲取所有字節之前結束。不是嗎? – tanyehzheng
@tanyehzheng這是不正確的。 ['InputStream.read'](http://docs.oracle.com/javase/7/docs/api/java/io/InputStream.html#read(byte []))的javadoc說,至少有一個字節將被退回,否則會阻止。如果第一個字節由於EOF之外的任何原因而無法讀取,那麼它會拋出一個'IOException'。對於此函數返回0的任何流都被錯誤地寫入,並且沒有正確地繼承'InputStream'。 (除非緩衝區是一個零長度的數組,否則如果條件改爲> = 0,那麼無論是處於阻塞模式還是非阻塞模式,它都會按預期工作。 – Brian