我有以下声明:
DataInputStream is = new DataInputStream(process.getInputStream());
我想打印这个输入流的内容,但我不知道这个流的大小。我应该如何读取这个流并打印它?
最佳答案
所有流的共同点是长度是事先不知道的。使用标准 InputStream
通常的解决方案是简单地调用 read
直到 -1
被退回。
但我假设,你已经包装了一个标准的 InputStream
用DataInputStream
有一个很好的理由:解析二进制数据。 (注意:Scanner
仅适用于文本数据。)
JavaDoc对于 DataInputStream
告诉你,这个类有两种不同的方式来指示 EOF - 每种方法要么返回 -1
或抛出 EOFException
.一个经验法则是:
- 继承自
InputStream
的每个方法使用“返回-1
”约定, - 每个方法不是继承自
InputStream
抛出EOFException
.
如果您使用 readShort
例如,读取直到抛出异常,如果您使用“read()”,请一直读取到 -1
被退回。
提示:开始时要非常小心,并从DataInputStream
中查找您使用的每个方法。 - 经验法则可能会被打破。
关于java - 要从 Java 中的 DataInputStream 读取的未知缓冲区大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7475611/