Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Text;
- namespace Test {
- public class ByteBuffer {
- public int readerIndex { get; set; }
- public int writerIndex { get; set; }
- private byte[] buffer;
- private int capacity;
- public ByteBuffer() {
- readerIndex = 0;
- writerIndex = 0;
- capacity = 32;
- buffer = new byte[capacity];
- }
- private void resizeIfNeeded(int bytesCount) {
- if (writerIndex + bytesCount < capacity) {
- return;
- }
- capacity = (int)(capacity * 1.7f) + bytesCount;
- var newBuffer = new byte[capacity];
- Array.Copy(buffer, newBuffer, buffer.Length);
- buffer = newBuffer;
- }
- public void writeByte(int value) {
- resizeIfNeeded(1);
- buffer[writerIndex++] = (byte) (value & 0x000000FF);
- }
- public void writeWord(int value) {
- resizeIfNeeded(2);
- buffer[writerIndex++] = (byte) (value & 0x000000FF);
- buffer[writerIndex++] = (byte) ((value >> 8) & 0x000000FF);
- }
- public void writeDword(int value) {
- resizeIfNeeded(4);
- buffer[writerIndex++] = (byte) (value & 0x000000FF);
- buffer[writerIndex++] = (byte) ((value >> 8) & 0x000000FF);
- buffer[writerIndex++] = (byte) ((value >> 16) & 0x000000FF);
- buffer[writerIndex++] = (byte) ((value >> 24) & 0x000000FF);
- }
- public void writeQword(ulong value) {
- resizeIfNeeded(8);
- buffer[writerIndex++] = (byte) (value & 0x00000000000000FF);
- buffer[writerIndex++] = (byte) ((value >> 8) & 0x00000000000000FF);
- buffer[writerIndex++] = (byte) ((value >> 16) & 0x00000000000000FF);
- buffer[writerIndex++] = (byte) ((value >> 24) & 0x00000000000000FF);
- buffer[writerIndex++] = (byte) ((value >> 32) & 0x00000000000000FF);
- buffer[writerIndex++] = (byte) ((value >> 40) & 0x00000000000000FF);
- buffer[writerIndex++] = (byte) ((value >> 48) & 0x00000000000000FF);
- buffer[writerIndex++] = (byte) ((value >> 56) & 0x00000000000000FF);
- }
- public void writeByteArray(byte[] bytes) {
- var length = bytes.Length;
- //string length + string will be written to the buffer
- resizeIfNeeded(length + 4);
- writeDword(length);
- Array.Copy(bytes, 0, buffer, writerIndex, length);
- writerIndex += length;
- }
- public void writeString(string value) {
- var length = value.Length;
- //string length + string will be written to the buffer
- resizeIfNeeded(length + 4);
- writeByteArray(Encoding.UTF8.GetBytes(value));
- }
- public int readByte() {
- return buffer[readerIndex++];
- }
- public int readWord() {
- int value = 0;
- value |= buffer[readerIndex++];
- value |= buffer[readerIndex++] << 8;
- return value;
- }
- public int readDword() {
- int value = 0;
- value |= buffer[readerIndex++];
- value |= buffer[readerIndex++] << 8;
- value |= buffer[readerIndex++] << 16;
- value |= buffer[readerIndex++] << 24;
- return value;
- }
- public ulong readQword() {
- ulong value = 0;
- value |= (ulong)buffer[readerIndex++];
- value |= (ulong)buffer[readerIndex++] << 8;
- value |= (ulong)buffer[readerIndex++] << 16;
- value |= (ulong)buffer[readerIndex++] << 24;
- value |= (ulong)buffer[readerIndex++] << 32;
- value |= (ulong)buffer[readerIndex++] << 40;
- value |= (ulong)buffer[readerIndex++] << 48;
- value |= (ulong)buffer[readerIndex++] << 56;
- return value;
- }
- public byte[] readByteArray() {
- var bytesCount = readDword();
- var bytes = new byte[bytesCount];
- Array.Copy(buffer, readerIndex, bytes, 0, bytesCount);
- readerIndex += bytesCount;
- return bytes;
- }
- public string readString() {
- return Encoding.UTF8.GetString(readByteArray());
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement