7

を使用するストリーム リーダー クラスの改善に取り組んでいますBinaryReader.PeekChar()これは、処理を続行するためにさらにデータが存在するかどうかを確認するために使用する while ループで構成されています。

最初の操作は、.ReadInt32()4 バイトを読み取る a です。PeekChar1 バイト (または 1 ビット) だけを "見た"としたら? これは、EOF をチェックする信頼できる方法とは思えません。

BinaryReader、デフォルトのパラメーターを使用して構築されており、私が理解しているように、デフォルトのエンコーディングとして UTF8 を使用しています。8ビットを.PeekChar()チェックすると思いますが、よくわかりません。

何ビット.PeekChar()を探しますか? (そして、EOFをチェックするための代替方法は何ですか?)

4

3 に答える 3

4

ここBinaryReader.PeekChar

私は読む:

ArgumentException: ストリームに対して選択されたエンコーディングを使用して、現在の文字を内部文字バッファーにデコードできません。

これにより、メモリの読み取り量がそのストリームに適用されるエンコーディングに依存することが明らかになります。

編集

MSDNによる実際の定義は次のとおりです。

次に使用可能な文字を返し、バイト または 文字位置を進めません 。*

実際、これがバイト以上の場合はエンコーディングに依存します...

お役に立てれば。

于 2011-08-24T21:00:44.250 に答える
1

やみくもにRead*()電話をかけ、スローされた例外を処理するのが通常の方法です。何か問題が発生した場合にストリームの位置が移動するとは思わない。

于 2011-08-24T20:54:25.750 に答える