documentation for System.IO.BinaryReader.Read(byte[], int, int)は読むためにデコードされた文字の数がカウントよりも大きいBinaryReader.Read(byte []、int、int)がエンコーディングに依存するのはなぜですか?
場合、それはArgumentExceptionがを投げることができると言います。これは、Unicodeデコーダがフォールバック文字またはサロゲートペアを返す場合に発生します。
生のバイトを要求しているときにエンコードがどのように再生されるかはわかりません。基礎となるストリームのバイトをUnicodeとして解釈し、バイトオーダーマークのようなものをスキップしますか?
サロゲートペアの解像度のような処理を行っても、最終的には私が求めたよりもをバイト作成することになりますか?
BinaryReaderのエンコーディングが基本ストリームに影響しないと仮定すると、binaryReader.Read(..)とbinaryReader.BaseStream.Read(..)は基本的に同じではありませんか? Mono's implementation of BinaryReaderではまったく同じようです。デコーダは、この機能の実装にも関与していません。
これは単にMSDNドキュメントのコピー/ペーストエラーですか?
私はこのコードブロックとArgumentExceptionがに走ったので、私はこのすべてを求めている理由であり、ArgumentExceptionがスローを得る2つの文書の場合のそれは些細な1することはできません。
public void Foo(BinaryReader reader)
{
int bar = reader.ReadInt32();
int baz = reader.ReadInt32();
int bufferSize = 8192;
var buffer = new byte[bufferSize];
int bytesRead = 0;
while ((bytesRead = reader.Read(buffer, 0, bufferSize)) != 0)
{
// do something with the read bytes here
...
}
}
は、* *「私はArgumentExceptionがに走った」 - あなたはエラー自体のより多くの情報を持っているために起こるのか?私はまさにユニコードとASCIIバイト配列をマージしていました。読み込み関数はうまくいきました。スタックトレースとメッセージを再現して表示できますか? – TyCobb