为什么InputStream.read()返回-1?

时间:2014-11-27 08:20:22

标签: java android sockets networking

我的android智能手机是tcpclient而chipkit wf32 wifi模块是我的tcp服务器。

int bytesRead;
InputStream inputStream = socket.getInputStream();

while ((bytesRead = inputStream.read(buffer)) != -1){
       byteArrayOutputStream.write(buffer, 0, bytesRead);
       response += byteArrayOutputStream.toString("UTF-8");
     }

上面的代码从流中读取数据并复制到缓冲区。如果没有数据将会阻止。但有时我得到-1。有人能解释获得-1的原因吗?在文档中提到"到达流的末尾"。但你能解释一下这个意思吗?谢谢。

2 个答案:

答案 0 :(得分:1)

如果您可以阅读文档,则会看到-1表示流的结束:
InputStream.read()

因此获得-1很自然。

答案 1 :(得分:0)

Oracle 说:

  

从输入流中读取下一个数据字节。值字节是   返回为0到255范围内的int。如果没有可用的字节   因为已到达流的末尾,值为-1   回。此方法阻塞,直到输入数据可用,结束   检测到流,或抛出异常。子类必须   提供这种方法的实现。

     

返回:       数据的下一个字节,如果到达流的末尾则为-1。