我有以下声明:
DataInputStream is = new DataInputStream(process.getInputStream());
我想打印这个输入流的内容,但我不知道这个流的大小。我应该如何读取这个流并将其打印出来?
DataInputStream is = new DataInputStream(process.getInputStream());
我想打印这个输入流的内容,但我不知道这个流的大小。我应该如何读取这个流并将其打印出来?
InputStream
时,通常的解决方法是直接调用read
,直到返回-1
为止。DataInputStream
封装了一个标准的InputStream
,一定是因为要解析二进制数据。(注意:Scanner
只适用于文本数据。)
DataInputStream
的JavaDoc向你展示了这个类有两种不同的指示EOF的方式——每种方法要么返回-1
,要么抛出EOFException
异常。一条经验法则是:
InputStream
继承而来的方法都使用“返回-1
”的约定,InputStream
继承而来的方法都会抛出EOFException
异常。readShort
,可以一直读取直到抛出异常;如果你使用read()
,那就一直读取直到返回-1
为止。DataInputStream
使用的每个方法——一条经验法则可能会失效。DataInput
的方法(不是从InputStream
继承的)会抛出EOFException
。感谢澄清。 - trashgod多次调用 is.read(byte[])
方法,传入预先分配的缓冲区(可以重复使用同一缓冲区)。该函数将返回实际读取的字节数,或在流结束时返回-1(此时,请停止):
byte[] buf = new byte[8192];
int nread;
while ((nread = is.read(buf)) >= 0) {
// process the first `nread` bytes of `buf`
}
byte[] buffer = new byte[100];
int numberRead = 0;
do{
numberRead = is.read(buffer);
if (numberRead != -1){
// do work here
}
}while (numberRead == buffer.length);
DataInputStream
已经过时了。我建议您使用 Scanner
。
Scanner sc = new Scanner (process.getInputStream());
while (sc.hasNextXxx()) {
System.out.println(sc.nextXxx());
}