【问题标题】:Check if DataInputStream has content检查 DataInputStream 是否有内容
【发布时间】:2014-01-19 12:02:07
【问题描述】:

有没有办法询问 DataInputStream 是否有要读取的内容? .readByte() 只会挂起它,等待读取一个字节:( 还是我总是必须发送一个虚拟字节,以确保它总是能看到一些东西?

【问题讨论】:

    标签: java sockets networking port datainputstream


    【解决方案1】:
    dis.available();
    

    返回: 可以不阻塞地从此输入流中读取(或跳过)的字节数的估计值。

    这是你要找的吗?

    也可以在这里查看答案。您可能会获得更多信息。 "available" of DataInputStream from Socket

    【讨论】:

    • 然后尝试读取然后未读取的数据。如果它真的没有返回任何东西。那么它是空的并且可用();像它应该的那样工作
    • 如果您单击该链接,您应该很清楚如何循环执行它,还有解释为什么它在某些情况下返回 0 的答案,请查看 dis的文档> 也是。
    • 好的,现在使用 PushBackInputStream 和 dis,pbs 为可用,dis 为 rest ;)
    【解决方案2】:

    看看

     public int available() throws IOException
    

    根据文档它“返回可以读取的字节数的估计值”

    所以你应该打电话给dis.available()

    【讨论】:

      【解决方案3】:

      当读取超过文件末尾时,会引发 EOFException。所以你可以说没有更多的数据要读取。例如:

       DataInputStream inputStream = new DataInputStream(new FileInputStream(file));
          int data = 0;
          try {
              while (true) {
                  data += inputStream.readInt();
              }
          } catch (EOFException e) {
              System.out.println("All data were read");
              System.out.println(data);
          }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-03-06
        • 1970-01-01
        • 2012-03-04
        • 2012-10-28
        相关资源
        最近更新 更多