0

我正在使用以下循环从套接字读取数据

InputStream in = getInputStream();
int retCode;

try {
  while( ( retCode = in.read()) > -1) {
    // do something
  }
  logger.info( "Done reading : Code " + retCode);
} catch( IOException ioe) {
  logger.warning( "IOException while reading : " + ioe.getMessage());
}

有时连接会断开,这是意料之中的,但结果是不一致的。
我得到一个异常,或者 retCode==-1

因此我的问题是什么决定了读取套接字时异常与返回代码?

4

2 回答 2

3

正如@PeterLawrey 正确提到的那样

如果in.read()返回-1 - 表示已到达流的末尾。

流/通信失败的任何不可用情况下的异常- 取决于抛出的异常类型。

更多的

于 2013-01-28T08:53:14.430 回答
0

@PeterLawrey 的回答是正确的

如果 in.read() 返回 -1 - 表示已到达流的末尾。

但还有更多。Java 流由操作系统套接字支持。如果您的程序在套接字关闭后尝试写入套接字,或者如果它尝试从损坏的套接字中读取,那么您的程序将收到一个 SocketException 原因,例如管道损坏对等连接重置。我在 Java 文档中找不到任何官方的东西,但似乎如果你的程序被阻止对套接字的输入流进行读取,然后套接字被干净地关闭(没有套接字异常),那么你的程序将是未阻塞,读取方法将返回 -1。

于 2022-02-03T21:17:13.823 回答