Jam*_*mes 6 c# memorystream binaryreader
我试图找出我在这里做错了什么.我正在尝试使用二进制读取器来简化从流中获取初始四个字节到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));
}
Run Code Online (Sandbox Code Playgroud)
输出应该是输入,但我得到这个(注意第一个字符从字符串更改为字符串)
(想象一下,这是一个非常长的字符串
有人可以向我解释我做错了什么吗?理想情况下,第二次读取将继续,直到总读取字节数等于前四个字节的值.此代码只是一个简化,以显示我遇到的问题.流的位置似乎是正确的(4)但它几乎看起来像是从2开始读取.
BinaryWriter.Write(String)将长度为前缀的字符串写入此流.这意味着它首先将字符串的长度写入流,然后使用某种编码将字符串写入字符串.长度一次编码7位,而不是32位整数.
如果要从流中读取,则应使用BinaryReader.ReadString,它从流中读取长度为前缀的字符串.
| 归档时间: |
|
| 查看次数: |
4148 次 |
| 最近记录: |