私は次の声明を持っています:
DataInputStream is = new DataInputStream(process.getInputStream());
この入力ストリームの内容を出力したいのですが、このストリームのサイズがわかりません。このストリームをどのように読み取って印刷すればよいですか?
私は次の声明を持っています:
DataInputStream is = new DataInputStream(process.getInputStream());
この入力ストリームの内容を出力したいのですが、このストリームのサイズがわかりません。このストリームをどのように読み取って印刷すればよいですか?
長さが事前にわからないことは、すべてのストリームに共通です。標準を使用する通常の解決策は、返されるまでInputStream単純に呼び出すことです。read-1
しかし、正当な理由で標準InputStreamを でラップしたと思います。バイナリデータを解析するためです。(注:はテキスト データのみを対象としています。)DataInputStreamScanner
JavaDoc forは、このクラスには EOF を示す 2 つの異なる方法があることを示しています。DataInputStream各メソッド-1はEOFException. 経験則は次のとおりです。
InputStreamは、"return -1" 規則を使用します。InputStreamは、EOFException.たとえば、使用する場合readShortは例外がスローされるまで読み取り、「read()」を使用する場合-1は返されるまでそうします。
ヒント:最初は十分に注意して、使用する各メソッドを調べてくださいDataInputStream。経験則が破られる可能性があります。
事前に割り当てられたバッファを渡して、繰り返し呼び出し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);
ループ内で設定されたバッファサイズを読み取り続けます。戻り値がバッファのサイズよりも小さい場合は、ストリームの最後に到達したことがわかります。戻り値が-1の場合、バッファにデータはありません。
DataInputStream時代遅れのものです。代わりに使用することをお勧めしますScanner。
Scanner sc = new Scanner (process.getInputStream());
while (sc.hasNextXxx()) {
System.out.println(sc.nextXxx());
}