MinecraftPrimitiveReader
ref-структура, предназначенная для чтения примитивных типов данных из бинарного потока в формате Minecraft-протокола. Она представляет собой высокопроизводительную оболочку над Span<byte>, что позволяет работать с данными напрямую из памяти без лишнего копирования.
Исходный код: MinecraftPrimitiveReader.cs
Основные методы
- void Advance(int count)
Перемещает внутренний указатель чтения на указанное количество байт.
- ReadOnlySpan<byte> Read(int count)
Считывает указанное количество байт и возвращает их в виде
ReadOnlySpan<byte>
.- int Read(Span<byte> output)
Считывает данные и записывает их в предоставленный
Span<byte>
. Возвращает количество фактически прочитанных байт.- int ReadVarInt()
Считывает целое число в формате
VarInt
из потока. Если число превышает допустимую длину, выбрасывает исключениеArithmeticException
.- long ReadVarLong()
Считывает целое число в формате
VarLong
из потока. Если число превышает допустимую длину, выбрасывает исключениеArithmeticException
.- bool ReadBoolean()
Считывает один байт и интерпретирует его как булево значение (
true
для 1,false
для 0).- byte ReadUnsignedByte()
Считывает один байт как беззнаковое целое число.
- sbyte ReadSignedByte()
Считывает один байт как знаковое целое число.
- ushort ReadUnsignedShort()
Считывает два байта в формате BigEndian и интерпретирует их как беззнаковое короткое целое число.
- short ReadSignedShort()
Считывает два байта в формате BigEndian и интерпретирует их как знаковое короткое целое число.
- int ReadSignedInt()
Считывает четыре байта в формате BigEndian и интерпретирует их как знаковое целое число.
- uint ReadUnsignedInt()
Считывает четыре байта в формате BigEndian и интерпретирует их как беззнаковое целое число.
- long ReadSignedLong()
Считывает восемь байт в формате BigEndian и интерпретирует их как знаковое длинное целое число.
- ulong ReadUnsignedLong()
Считывает восемь байт в формате BigEndian и интерпретирует их как беззнаковое длинное целое число.
- float ReadFloat()
Считывает четыре байта в формате BigEndian и интерпретирует их как значение типа
float
.- double ReadDouble()
Считывает восемь байт в формате BigEndian и интерпретирует их как значение типа
double
.- string ReadString()
Считывает строку в формате UTF-8. Сначала считывает длину строки как
VarInt
, затем соответствующее количество байт.- Guid ReadUUID()
Считывает 16 байт и интерпретирует их как UUID.
- byte[] ReadRestBuffer()
Считывает все оставшиеся данные в буфере и возвращает их в виде массива байтов.
- byte[] ReadBuffer(int length)
Считывает указанное количество байт и возвращает их в виде массива байтов.
- NbtTag? ReadOptionalNbtTag(bool readRootTag)
Считывает опциональный тег NBT. Возвращает
null
, если тег отсутствует, или объектNbtTag
, если он есть.- NbtTag ReadNbtTag(bool readRootTag)
Считывает тег NBT из потока. Поддерживает чтение как корневого, так и вложенного тега.