java - 要从 Java 中的 DataInputStream 读取的未知缓冲区大小

标签 java io inputstream datainputstream

我有以下声明:

DataInputStream is = new DataInputStream(process.getInputStream());

我想打印这个输入流的内容,但我不知道这个流的大小。我应该如何读取这个流并打印它?

最佳答案

所有流的共同点是长度是事先不知道的。使用标准 InputStream通常的解决方案是简单地调用 read直到 -1被退回。

但我假设,你已经包装了一个标准的 InputStreamDataInputStream有一个很好的理由:解析二进制数据。 (注意:Scanner 仅适用于文本数据。)

JavaDoc对于 DataInputStream告诉你,这个类有两种不同的方式来指示 EOF - 每种方法要么返回 -1或抛出 EOFException .一个经验法则是:

  • 继承自 InputStream 的每个方法使用“返回 -1”约定,
  • 每个方法不是继承自InputStream抛出 EOFException .

如果您使用 readShort例如,读取直到抛出异常,如果您使用“read()”,请一直读取到 -1被退回。

提示:开始时要非常小心,并从DataInputStream中查找您使用的每个方法。 - 经验法则可能会被打破。

关于java - 要从 Java 中的 DataInputStream 读取的未知缓冲区大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7475611/

相关文章:

java - Java中SocketRead0线程挂了,怎么办?

android - 如何以分贝为单位计算麦克风音频输入功率

java - 如何在运行时/启动时禁用 System.setOut 和 setErr?

java - DataInputStream 的字节顺序

java - Java中半结构化数据的贝叶斯分类

java - 通过 Java 应用 XSLT 进行通用 XML 排序?

python - 将新行添加到输出文件python

java - 使用 Java 获取 Internet 文件并将其创建为 File 对象?

java - Unity3D如何为android插件添加权限到AndroidManifest.xml

Java EntityManager事务被破坏,如何定位导致它的SQL?