Какой самый быстрый (возможно, небезопасный) способ чтения байта []?

Я работаю над серверным проектом на C #, и после получения сообщения TCP оно анализируется и сохраняется в байт [] точного размера. (Не буфер фиксированной длины, а байт [] абсолютной длины, в котором хранятся все данные.)

Теперь для чтения этого байта [] я создам некую оболочку функции (также для совместимости), это подписи всех необходимых мне функций:

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++]);
}

Но мне интересно, есть ли более быстрый способ, не исключающий использования небезопасного кода, поскольку это, кажется, требует слишком много времени для простой обработки.

7
задан Aidiakapi 4 March 2011 в 15:42
поделиться