0

1 つのInputStreamから文字列行とバイト配列を読み取りたいと思います。私はその時そのようにやっています:

// stream for reading byte arrays
InputStream stream = process.getInputStream();
// reader for reading String lines
BufferedReader reader = new BufferedReader(new InputStreamReader(stream));

String msg = reader.readLine();
// if (msg == "data16")
byte[] bytes = new byte[16];
stream.read(bytes);

リーダーから行data16を取得すると、次のことを意味します。16 バイトのバイト配列が続きます。問題は、ストリームからバイトを読み取ろうとすると、「data16」ASCIIコードが取得されることです。つまり、リーダーで読み取ったときにストリームが位置を更新しないことを意味します。それらの位置を同期する方法はありますか? DataInputStream は、バイト配列の読み取りと行の読み取りの両方を実行できることを知っています。しかし、そのメソッドは推奨されておらず、バイトを文字に適切に変換できません。readLine

バイトには、0、10、および 13 と、最大 255 までの他のすべてのバイトを含めることもできます。

パフォーマンスは重要なので、byte-after-byte や char-after-char を読みたくありません。また、可能であれば、「スキップ」メソッドを使用するために読み取られたバイトと文字を「手動で」カウントすることを避けたいと思います。

4

1 に答える 1

1

あなたがやりたいことができるとは思えません。BufferedReader は、新しい行まで読み取るだけでなく、InputStream からデータをバッファリングしています。

あなたの最善の策は、すべてを自分で行うことですが、一度に 1 バイトずつ読み取る必要はありません。バッファをメモリに読み取って、実際の I/O を削減するために作業することができます。

于 2013-01-11T11:12:37.667 に答える