【发布时间】:2011-03-04 15:12:32
【问题描述】:
我正在使用 C# 开发一个服务器项目,在收到 TCP 消息后,它被解析并存储在一个精确大小的 byte[] 中。 (不是固定长度的缓冲区,而是存储所有数据的绝对长度的 byte[]。)
现在为了阅读这个字节[],我将创建一些包装函数(也是为了兼容性),这些是我需要的所有函数的签名:
public byte ReadByte();
public sbyte ReadSByte();
public short ReadShort();
public ushort ReadUShort();
public int ReadInt();
public uint ReadUInt();
public float ReadFloat();
public double ReadDouble();
public string ReadChars(int length);
public string ReadString();
该字符串是一个以 \0 结尾的字符串,并且可能以 ASCII 或 UTF-8 编码,但我无法确定这一点,因为我不是在编写客户端。
数据存在于:
byte[] _data;
int _offset;
现在我可以手动编写所有这些函数,如下所示:
public byte ReadByte()
{
return _data[_offset++];
}
public sbyte ReadSByte()
{
byte r = _data[_offset++];
if (r >= 128) return (sbyte)(r - 256);
else return (sbyte)r;
}
public short ReadShort()
{
byte b1 = _data[_offset++];
byte b2 = _data[_offset++];
if (b1 >= 128) return (short)(b1 * 256 + b2 - 65536);
else return (short)(b1 * 256 + b2);
}
public short ReadUShort()
{
byte b1 = _data[_offset++];
return (short)(b1 * 256 + _data[_offset++]);
}
但我想知道是否有更快的方法,不排除使用不安全代码,因为这似乎花费了太多时间来进行简单处理。
【问题讨论】:
标签: c# multithreading buffer