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

nik*_*hil 6 java io inputstream datainputstream

我有以下声明:

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

我想打印此输入流的内容,但我不知道此流的大小.我该如何阅读此流并打印出来?

A.H*_*.H. 8

所有Streams都很常见,事先并不知道长度.使用标准InputStream通常的解决方案是简单地调用read直到-1返回.

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

JavaDoc中DataInputStream您展示这一类有两种不同的方式来表示EOF -每个方法要么返回-1或抛出EOFException.经验法则是:

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

readShort例如,如果您使用,则读取直到抛出异常,如果您使用"read()",请执行此操作直到-1返回.

提示:在开始时要非常小心并查找您使用的每种方法DataInputStream- 经验法则可能会中断.


NPE*_*NPE 2

重复调用is.read(byte[]),传递预先分配的缓冲区(您可以继续重复使用相同的缓冲区)。该函数将返回实际读取的字节数,或在流末尾返回 -1(在这种情况下,停止):

byte[] buf = new byte[8192];
int nread;
while ((nread = is.read(buf)) >= 0) {
  // process the first `nread` bytes of `buf`
}
Run Code Online (Sandbox Code Playgroud)