繁体   English   中英

读取套接字的输入流

[英]reading inputstream of a socket

我有片段

try {
    is = new BufferedReader(new inputStreamReader(getSocket().getInputStream()));
}
catch(IOException e) {}
while(true) {println(is.readLine());}

基本上,我正在尝试将发送到getSocket()返回的套接字的输入流中的每条消息传递给println。 我的问题是:

  1. 如果没有消息发送到套接字,则调用readLine()方法返回什么值? 是空值还是空字符串(即“”),还是其他?
  2. 发送消息并打印出来后,套接字的输入流发生了什么? 清空了吗?
  3. 我们是否需要一种方法来检查仅在输入流中有需要打印的内容时才调用println()方法?
  1. 如果流中没有发送任何内容-则没有任何内容可供读取。 您的读者正在等待。
  2. 仅从您收到的数据中清空它。
  3. 您应该拥有while(true)循环,该循环试图从流中读取行。 您无需检查任何内容。

如果插座在第二侧关闭,则读取器将读取null 如果第二端在没有关闭套接字的情况下退出,则会得到IOException

如果没有消息发送到套接字,则调用readLine()方法返回什么值? 是空值还是空字符串(即“”),还是其他?

都不行 它阻止了。

发送消息并打印出来后,套接字的输入流发生了什么? 清空了吗?

否。收到的数据已从其中删除。 可能还有其他等待读取的未决数据。

我们是否需要一种方法来检查仅在输入流中有需要打印的内容时才调用println()方法?

否。它一直阻塞,直到接收到一行,流结束或引发IOException为止。

您的读取循环不正确。 它不检测流的结尾。 编写它的通常方法是:

while ((line = in.readLine()) != null)
    // ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM