Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 什么触发套接字';将InputStream关闭(或到达流的末尾),并简单地生成null?_Java_Sockets_Server_Client_Bufferedreader - Fatal编程技术网

Java 什么触发套接字';将InputStream关闭(或到达流的末尾),并简单地生成null?

Java 什么触发套接字';将InputStream关闭(或到达流的末尾),并简单地生成null?,java,sockets,server,client,bufferedreader,Java,Sockets,Server,Client,Bufferedreader,这听起来是个奇怪的问题,但我一直在玩弄使用套接字的服务器/客户端Java工作。有趣的是,当我运行一个单独的线程让客户端通过以下代码从服务器读取行时: String servIn = null; boolean isFinished = false; while(!isFinished){ servIn = reader.readLine(); System.out.println(servIn);

这听起来是个奇怪的问题,但我一直在玩弄使用套接字的服务器/客户端Java工作。有趣的是,当我运行一个单独的线程让客户端通过以下代码从服务器读取行时:

        String servIn = null;
        boolean isFinished = false;
        while(!isFinished){

            servIn = reader.readLine();
            System.out.println(servIn);

        }
当我需要完成的所有读取都结束时(换句话说,我不再向代码中的套接字写入代码),这段代码产生了无休止的“null”流。在做了一点研究之后,基于,我得出结论,一旦所有的方法都运行了,流就结束了

我发现这很奇怪,因为我从未明确告诉流在末尾关闭,代码中有时需要挂起(BufferedReader,来自套接字)readLine()以等待(PrintWriter,来自套接字)writer.println()在代码的另一端,反之亦然。从我对readLine()和println()的理解来看,它们似乎要等到各自的另一个方法准备就绪。这让我感到困惑,因为在我看来,在代码的末尾,它应该停留在readLine()而不是抛出“null”。JVM或类套接字是否只是通过向前看并看到不再通过println()进行写入来确定OutputStream何时结束


我从套接字流中对println()和readLine()的解释正确吗?如果正确,是什么导致突然转换为吐出“null”的?提前谢谢

在我看来,你关闭了另一侧的插座

在我看来,你关闭了另一侧的插座

是什么触发套接字的InputStream关闭(或到达流的末尾),并简单地生成null

  • 触发
    InputStream
    关闭的唯一方法是对其或其底层套接字调用
    close()
  • 触发
    InputStream
    到达流末尾的是在文件的情况下读取到文件末尾,或者在套接字的情况下对等方关闭连接
  • InputStream
    不会返回null,但是当您到达流的末尾时,
    BufferedReader.readLine()
    会返回null,正如Javadoc中所说的那样
  • 您可能不知道关闭套接字的输入流或输出流将关闭套接字

    这段代码产生了源源不断的“null”

    那个是因为你们忽略了流的末端。出现这种情况时,应关闭插座并停止读取

    是什么触发套接字的InputStream关闭(或到达流的末尾),并简单地生成null

  • 触发
    InputStream
    关闭的唯一方法是对其或其底层套接字调用
    close()
  • 触发
    InputStream
    到达流末尾的是在文件的情况下读取到文件末尾,或者在套接字的情况下对等方关闭连接
  • InputStream
    不会返回null,但是当您到达流的末尾时,
    BufferedReader.readLine()
    会返回null,正如Javadoc中所说的那样
  • 您可能不知道关闭套接字的输入流或输出流将关闭套接字

    这段代码产生了源源不断的“null”


    那个是因为你们忽略了流的末端。当您遇到这种情况时,应该关闭套接字并停止读取。

    您确定没有通过循环写入大量空值吗。实际上只是空字符串。@3kings,这将导致
    readLine()
    返回空字符串,而不是空字符串。您确定没有通过循环写入一组空值吗。实际上只是空字符串。@3kings会导致
    readLine()
    返回空字符串,而不是空字符串。这并不能提供问题的答案。一旦你有足够的钱,你将能够;相反@你错了。这不仅是一个答案,也是一个正确的答案。@EJP它太短了。一些解释可能会有所帮助。尽管如此,它还是在审查“低质量帖子”。@SharpEdge VLQ审查队列似乎在字数或字符数方面起作用。这样做的目的是让你重新审视,而不是盲目地同意“太短”完全在旁观者的眼中。相关的事实出现在答案中。我并没有盲目地同意。我仍然坚持我的说法,答案似乎太短,另一方面,你的答案有一些解释。我将不得不通过堆栈溢出常见问题解答和元为此。为了记录在案,我没有否决他的答案。这并不能回答这个问题。一旦你有足够的钱,你将能够;相反@你错了。这不仅是一个答案,也是一个正确的答案。@EJP它太短了。一些解释可能会有所帮助。尽管如此,它还是在审查“低质量帖子”。@SharpEdge VLQ审查队列似乎在字数或字符数方面起作用。这样做的目的是让你重新审视,而不是盲目地同意“太短”完全在旁观者的眼中。相关的事实出现在答案中。我并没有盲目地同意。我仍然坚持我的说法,答案似乎太短,另一方面,你的答案有一些解释。我将不得不通过堆栈溢出常见问题解答和元为此。为了记录在案,我没有否决他的答案。