gpt4 book ai didi

C#解释流字符串例子

转载 作者:太空宇宙 更新时间:2023-11-03 22:47:35 25 4
gpt4 key购买 nike

我正在使用 Microsoft 示例进行进程间通信。在example有两种方法可以从流中读取/写入字符串。该代码发送数据中流式传输的字符串的长度。我需要类似的代码,但需要进行一些修改。对突出显示的行进行解释会很有帮助。

WriteString() 中,他们获取正在写入的字节数组的长度并将其除以 256。在 ReadString() 中做相反的事情,但是一个解释至于为什么使用 256 会很好。然后,它通过获取长度和 & 255 来写入另一个字节。我也不明白这样做的原因。我认为它改变了值(value),但我真的不明白为什么需要这样做。然后在 ReadString() 中,它通过读取一个字节对长度执行 +=。对此的解释将非常有帮助。我是流媒体的新手,只想准确了解正在发生的事情以及原因。

    public string ReadString()
{
int len = 0;

// the next two lines
len = ioStream.ReadByte() * 256;
len += ioStream.ReadByte();
byte[] inBuffer = new byte[len];
ioStream.Read(inBuffer, 0, len);

return streamEncoding.GetString(inBuffer);
}

public int WriteString(string outString)
{
byte[] outBuffer = streamEncoding.GetBytes(outString);
int len = outBuffer.Length;
if (len > UInt16.MaxValue)
{
len = (int)UInt16.MaxValue;
}

// the next to lines
ioStream.WriteByte((byte)(len / 256));
ioStream.WriteByte((byte)(len & 255));
ioStream.Write(outBuffer, 0, len);
ioStream.Flush();

return outBuffer.Length + 2;
}

最佳答案

这段代码不好,找一个新的教程。

256 的作用是将长度整数的低 2 字节转换为字节,以便对其进行序列化/反序列化。这不是通常的做法。使用 BinaryReader/Writer或代码不是基于乘法而是基于二进制和移位。

除以 256 等于 x >> 8 .这也只适用于正整数。 x & 255用于取最低字节。这可能只是 (byte)x .有时人们会写 x % 256为此,这不是惯用的,并且在签名方面存在问题。

好的代码应该是 new byte[] { (byte)(x >> 8), (byte)(x >> 0) }x = bytes[1] << 8 | bytes[0] .更简单,更快和惯用。我喜欢写作 >> 0为了对称起见,它什么都不做。它被优化掉了。这对于 16 位整数来说可能看起来很荒谬,但对于更长的整数,有 4 或 8 个组件,其中之一稍微偏离似乎是不必要的不​​一致。

ioStream.Read(inBuffer, 0, len);

是一个错误,因为它假定读取在一个 block 中完成。需要一个循环或再次BinaryReader .

if (len > UInt16.MaxValue)
{
len = (int)UInt16.MaxValue;
}

我打算借此机会警告任何读到这篇文章的人:Microsoft .NET 示例代码通常质量极差。带着极大的怀疑阅读它。

关于C#解释流字符串例子,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49172352/

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