私がここで間違っていることを理解しようとしています。私はバイナリリーダーを使用してストリームの最初の4バイトをInt32値に簡単に取得しようとしていますが、これは残りのデータがどれくらいの期間予想されるかを示しています。C#BinaryReader.Read()はじまりを開始します
static void Main(string[] args)
{
MemoryStream stream = new MemoryStream();
BinaryWriter writer = new BinaryWriter(stream);
string s = "Imagine this is a very very long string.";
writer.Write(s.Length);
writer.Write(s);
writer.Flush();
BinaryReader reader = new BinaryReader(stream);
reader.BaseStream.Seek(0, SeekOrigin.Begin);
char[] aChars = new char[reader.ReadInt32()];
reader.Read(aChars, 0, aChars.Length);
Console.WriteLine(new string(aChars));
}
出力は、入力する必要がありますが、私はこれを取得する(これは
非常に非常に長い文字列であると想像(文字列への文字列の先頭文字があることに注意してください)
私が間違っていることを誰かに説明することはできますか?理想的には、2番目の読み込みは、読み込みバイトの合計が最初の4バイトの値に等しくなるまで継続します..このコードは、ストリームの位置はcorrのようですect(4)のようになりますが、ほとんどの場合2で読み始めているようです。
MSDN、あなたはそれを読んでいます。 – jason
Hehe、ありがとう...と私はいました。残念ながら、BinaryReaderは、Writerが文字列よりも文字列の余分なデータを格納しているとは言及していません;) – James
'BinaryWriter.Write(string)': "長さの接頭辞' string'は、 'string'の前に'文字列 '' string'の長さを含む単一バイトまたは単語このメソッドはまず、 'string'の長さをUTF-7で符号化された符号なし整数として書き込み、次にその文字を' BinaryWriter'インスタンスの現在のエンコーディングです。 – jason