c# - 读取 byte[] 最快(可能不安全)的方法是什么?

标签 c# multithreading buffer

我正在用 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++]);
}

但我想知道是否有更快的方法,不排除使用不安全代码,因为这似乎花费太多时间进行简单处理。

最佳答案

查看 BitConverter类,在 System 命名空间中。它包含将 byte[] 的部分转换为其他原始类型的方法。我在类似的情况下使用过它,并且发现它的速度相当快。

至于从 byte[]s 解码字符串,使用派生自 Encoding 的类System.Text 命名空间中的类,特别是 GetString(byte[])方法(及其重载)。

关于c# - 读取 byte[] 最快(可能不安全)的方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5195511/

相关文章:

Java等待和notifyAll : IllegalMonitorStateException

c - 使用网络内核扩展监控网络数据包

vim - vim 中每个选项卡的缓冲区

c# - 用于嵌入字体 : System. ArgumentException 的 PDFsharp/MigraDoc 字体解析器:找不到字体 'Ubuntu'

c# - ThreadAbortException 最后能跳过吗?

c# - 验证构造函数参数的正确方法是什么

multithreading - 多线程中的 Guice 和 RequestScoped 行为

node.js - Node js 's Buffer.toString( ' 二进制')

c# - 向 breeze-saving-server 函数发送附加参数

c# - 学习 DLR(如何在其上实现一种语言)