gpt4 book ai didi

C# BinaryReader.Read() 开始变得垃圾

转载 作者:太空狗 更新时间:2023-10-29 21:25:03 25 4
gpt4 key购买 nike

我想弄清楚我在这里做错了什么。我正在尝试使用 Binary Reader 来轻松地将流中的初始四个字节转换为 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));
}

输出应该是输入,但我明白了(注意第一个字符从字符串变为字符串)

(Imagine this is a very very long string

有人可以向我解释我做错了什么吗?理想情况下,第二次读取将继续,直到读取的总字节数等于前四个字节的值。这段代码只是为了显示我遇到的问题的简化。流的位置似乎是正确的 (4),但它几乎看起来像是从 2 开始读取。

最佳答案

BinaryWriter.Write(String)将长度前缀字符串写入此流。这意味着它首先将字符串的长度写入流,然后使用某种编码写入字符串。长度一次编码为 7 位,而不是 32 位整数。

如果你想从流中读取,你应该使用BinaryReader.ReadString ,它从流中读取长度前缀的字符串。

关于C# BinaryReader.Read() 开始变得垃圾,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4262321/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com