有什么区别

byte[] buffer = new byte[1024];
// this:
if (inputStream.read(buffer) > 0) { /*...*/ }
// and:
if (inputStream.read(buffer) != -1) { /*...*/ }

两者都能确定网络流终止吗?

#1楼 票数:10 已采纳

InputStream.read()的Javadocs说:

如果b的长度为零,则不读取任何字节,返回0

在正常使用中,这种情况永远不会发生,因此明确地测试这种情况没有太大意义。 (如果你想避免永远循环,因为在这种情况下缓冲区是零长度和快速失败,只需测试缓冲区的长度。)

还有,有:

返回:读入缓冲区的总字节数,如果由于已到达流末尾而没有更多数据,则返回 -1

如果要测试文件结束 (或网络流,或其他),请使用测试:

if ( inputStream.read(buffer) != -1 ) ...

非bug的Java实现永远不会返回任何其他内容,以表明没有更多的数据可用。

#2楼 票数:1

根据docinputstream.read(buffer) !=-1会告诉你流已经结束了。 inputstream.read(buffer) == 0只是说没有可用的字节可供读取,但是流仍处于活动状态(即,自上次读取所有内容后,对等体才发送了任何内容)。

#3楼 票数:1

如果您已经知道缓冲区长度不为零, 则这两个表达式之间没有有效差异 鉴于有关有效缓冲区的这一基本规定,可以从read文档中推断read永远不会返回0

此方法将阻塞,直到输入数据可用,检测到文件结尾或引发异常。

  ask by Adam Lee translate from so

未解决问题?本站智能推荐:

2回复

“跳过” Stream.read操作,而无需在Java中关闭流

当您拥有一个流(例如inputStream或outputStream并且使用 它暂停当前线程,直到接收到数据。 我知道可以恢复线程的唯一方法是关闭另一个线程的流,这会引发异常并跳到catch块。 我正在处理套接字,在那里我有一个线程循环并从同级获取数据。 我正在考虑添加一个
1回复

Stream.of(int [])返回Stream 而Stream.of(String [])返回Stream 为什么?

Stream.of(int[])返回Stream<int[]> ,而Stream.of(String[])返回Stream<String> 。 为什么两种方法的行为有所不同? 两者都应返回Stream<int>和Stream<String>
3回复

什么是与System.in.read()一起使用的End of File / Stream键盘组合

如果这个琐碎的问题已经得到解答,请道歉,我在SO处找不到它。 使用此Java简单代码(Windows 7和Eclipse Kepler)从IDE控制台读取行: 用户如何使值v等于-1? (我尝试过Ctrl + d - z - x - c - s - e和其他没有可重复行为的键,但是循
1回复

input.read()从不返回-1

我正在用Java编写代理服务器。 最初,我会做(简体) 其中inputbuffer是到目前为止接收到的字节的集合(我一直读取传入的数据,直到知道主机头的那一部分为止,然后打开与服务器的连接并发送到目前为止的内容)。 因此,服务器是我的欢迎套接字,输入是从客户端到我的代理的数据,输
1回复

为什么InputStreamReader是read()块而不是返回-1?

我正在使用java的InputStreamReader read()函数。 当我到达输入流的末尾时,我应该进入我的int变量-1的值,但它转到阻塞。 为什么我不在输入流的末尾得到-1? (我已经逐字逐句地调试它,确保它实际上是输入结束并且连接套接字处于活动状态)。 使用ready()
1回复

PipedInputStream.read()返回-1

如果我没有关闭任何流, PipedInputStream.read()如何返回-1? closedByReader为false, closedByWriter为false, connected为true,但返回-1; 为什么认为我完成了? read()应该返回负数的条件是什么? 编辑
1回复

Java / Scala-ReactiveStreams /枚举如何连续读取输入流,直到read()返回-1

目前,我有一个Publisher [InputStream],我如何知道它具有类似Java8 Streams API所提供的内容: 目前,我使用Scala和playframework,并希望通过实验性的akka​​-streams / reactivestreams库对输出进行分块,但是
1回复

Java-为什么ImageIO.read(filename)返回null并且输入图像被0字节覆盖?

我有几种处理.jpg图像的方法:在x和y轴上镜像,平铺,转换为ASCII文本以及调整其亮度。 除亮度之一外,所有方法均正常工作。 当我运行亮度方法时, readGrayscaleImage()有一个NullPointerException(请参见下文-教师编写的代码)。 BufferedI