2バイト整数とUTF-8文字のペアのリストであるバイナリファイルがあります。私がしているのは
InputStream stream = ...;
InputStreamReader in = new InputStreamReader(stream);
while(...){
stream.read(...);
in.read();
}
つまり、InputStreamからバイトを直接読み取り、同じファイルストリームのInputStreamReaderからcharを読み取ります。これは私には奇妙な(ひどい?)考えのように見えますが、別の方法はわかりません。DataInputStreamはUTF-16文字のみを読み取り、UTF-8文字がバイトから読み取るのに何バイトかかるかわかりません(InputStreamReaderを再発明したくありません)。また、同じスキームが出力で機能しました。
私の問題は、最初のペアを読み取った後、InputStream.readが-1を返すことです(もちろん、ファイルはそれよりも長くなります)。
より良い代替案があるかどうか、またはEOFの別の原因があった可能性があるかどうかを知りたいです。また、このスキームで問題がない場合は、ReaderまたはInputStreamを閉じる必要がありますか?