【发布时间】:2011-05-14 19:44:05
【问题描述】:
我想弄清楚我在这里做错了什么。我正在尝试使用二进制读取器来轻松地将流中的初始四个字节转换为 Int32 值,该值告诉我剩余数据的预期时间。
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));
}
输出应该是输入,但我明白了(注意第一个字符从字符串变为字符串)
(想象这是一个非常长的字符串
有人可以向我解释我做错了什么吗?理想情况下,第二次读取将继续,直到总读取字节数等于前四个字节的值。这段代码只是为了显示我遇到的问题的简化。流的位置似乎是正确的 (4),但它几乎似乎从 2 开始读取。
【问题讨论】:
-
呵呵,谢谢...我是。对我来说不幸的是,BinaryReader 没有提到 Writer 为字符串存储额外的数据而不是字符串;)
-
BinaryWriter.Write(string): "以长度为前缀的string表示string的长度,在string前面加上一个包含string长度的单个字节或单词。此方法首先将string的长度写入为UTF-7 编码的无符号整数,然后使用BinaryWriter实例的当前编码将那么多字符写入流。" -
BinaryReader.ReadString: "从当前流中读取string。string以长度为前缀,编码为整数,一次七位。"
标签: c# memorystream binaryreader