有什么区别
byte[] buffer = new byte[1024];
// this:
if (inputStream.read(buffer) > 0) { /*...*/ }
// and:
if (inputStream.read(buffer) != -1) { /*...*/ }
两者都可以确定网络流终止吗?
有什么区别
byte[] buffer = new byte[1024];
// this:
if (inputStream.read(buffer) > 0) { /*...*/ }
// and:
if (inputStream.read(buffer) != -1) { /*...*/ }
两者都可以确定网络流终止吗?
JavadocsInputStream.read()
说:
如果 的长度
b
为零,则不读取任何字节并返回 0
在正常使用中,这永远不会发生,因此明确测试这种情况没有多大意义。(如果你想避免永远循环,因为缓冲区是零长度并且在这种情况下快速失败,只需测试缓冲区的长度。)
更进一步,还有:
返回:读入缓冲区的总字节数,或者
-1
是否因为到达流的末尾而没有更多数据。
如果要测试文件结尾(或网络流,或其他),请使用测试:
if ( inputStream.read(buffer) != -1 ) ...
没有错误的 Java 实现将永远不会返回任何其他内容以表明没有更多可用数据。
如果您已经知道缓冲区长度不为零,那么这两个表达式之间没有有效区别。鉴于这个关于有效缓冲区的基本规定,它可以从永远不会返回的文档中推断出来。read
0
在输入数据可用、检测到文件结尾或引发异常之前,此方法会一直阻塞。
根据文档,inputstream.read(buffer) !=-1
会告诉您流已结束。inputstream.read(buffer) == 0
只是说没有可读取的字节,但流仍然处于活动状态(即,自从您上次读取所有可能的内容以来,对等方还没有发送任何内容)。