public void TestReadWrite() { byte byteValue = 32; int numBitsByte = BitUtils.BitsToHoldUInt(byteValue); uint uintValue = 123456; int numBitsUInt = BitUtils.BitsToHoldUInt((uint)uintValue); BitWriteBuffer wb = new BitWriteBuffer(); wb.Write(true); wb.Write(false); wb.Write(byteValue); wb.Write(byteValue, numBitsByte); wb.Write(uintValue); wb.Write(uintValue, numBitsUInt); byte[] data = wb.Data; using (Stream stream = File.OpenWrite("data.bin")) { using (BinaryWriter writer = new BinaryWriter(stream)) { writer.Write(wb.LengthBits); writer.Write(wb.LengthBytes); writer.Write(data, 0, wb.LengthBytes); } } BitReadBuffer rb = null; using (Stream stream = File.OpenRead("data.bin")) { using (BinaryReader reader = new BinaryReader(stream)) { int lenBits = reader.ReadInt32(); int lenBytes = reader.ReadInt32(); data = new byte[lenBytes]; reader.Read(data, 0, lenBytes); rb = new BitReadBuffer(data, lenBits); } } Assert.AreEqual(true, rb.ReadBoolean()); Assert.AreEqual(false, rb.ReadBoolean()); Assert.AreEqual(byteValue, rb.ReadByte()); Assert.AreEqual(byteValue, rb.ReadByte(numBitsByte)); Assert.AreEqual(uintValue, rb.ReadUInt32()); Assert.AreEqual(uintValue, rb.ReadUInt32(numBitsUInt)); }
private void ReadKeyEntries(BitReadBuffer buffer, List <KeyEntry> entries) { entries.Clear(); bool hasKeys = buffer.ReadBoolean(); if (hasKeys) { int count = buffer.ReadByte();; for (int i = 0; i < count; ++i) { KeyState state = (KeyState)buffer.ReadUInt32(BitsPerKeyState); KeyCode key = (KeyCode)buffer.ReadUInt32(BitsPerKey); int playerIndex = -1; bool hasPlayerIndex = buffer.ReadBoolean(); if (hasPlayerIndex) { playerIndex = (int)buffer.ReadUInt32(BitsPerPlayerIndex); } entries.Add(new KeyEntry(new KeyEventArg(key, playerIndex), state)); } } }