次のように Java InputStream から読み取ろうとしているとします。
ZipInputStream zis = new ZipInputStream(new FileInputStream("C:\\temp\\sample3.zip"));
zis.getNextEntry();
byte[] buffer2 = new byte[2];
int count = zis.read(buffer2));
if(count != -1) //process...
else...//something wrong, abort
バイナリ ファイルを解析しています。この場合、次の短いファイルを読みたいので、バッファを 2 に設定します。次の int を読み取りたい場合は、バッファーのサイズを 4 に設定し、他の型についても同様に設定します。問題は、バッファーを満たすのに十分な未読データがあることがわかっている場合でも、zis.read(buffer) がバッファーを満たさない場合があることです。ファイルの内容全体を配列にダンプして解析することもできますが、それを行うために独自のストリーム リーダーを実装することになり、車輪の再発明のように思えます。読み取りカウントをチェックする read() 関数を実装することもできます。バッファサイズよりも小さい場合は、バッファを満たすために追加のデータを要求しますが、それは非効率的で見苦しいものです。これを行うより良い方法はありますか?
これは、ここに投稿された質問に対するフォローアップの質問です。