public void TestMap(IDictionary <string, int> expected) { using (var stream = new MemoryStream()) using (var encoder = new BinaryEncoder(stream)) using (var decoder = new BinaryDecoder(stream)) { encoder.WriteMap(expected, (s, e) => s.WriteInt(e)); stream.Seek(0, SeekOrigin.Begin); var actual = decoder.ReadMap(s => s.ReadInt()); Assert.AreEqual(expected, actual); } }
public void DecodeMap(IDictionary <string, int> expectedValue, int expectedLength, byte[] value) { using (var stream = new MemoryStream(value)) using (var decoder = new BinaryDecoder(stream)) { var decode = decoder.ReadMap(s => s.ReadInt()); Assert.AreEqual(expectedLength, stream.Position, "Decode offset error"); Assert.AreEqual(expectedValue, decode); stream.Seek(0, SeekOrigin.Begin); decoder.SkipMap(s => s.SkipInt()); Assert.AreEqual(expectedLength, stream.Position, "Skip offset error"); } }
private void UpdateFromFile() { using (var stream = FileInfo.Open(FileMode.Open, FileAccess.Read, FileShare.Read)) using (var decoder = new BinaryDecoder(stream)) { Magic = decoder.ReadFixed(4); if (!Magic.SequenceEqual(MAGIC_BYTES)) { throw new Exception("Invalid Avro file"); } Metadata = decoder.ReadMap(s => s.ReadBytes()); if (Metadata.TryGetValue("avro.schema", out var schemaBytes)) { Schema = AvroParser.ReadSchema(Encoding.UTF8.GetString(schemaBytes)); } else { throw new Exception("Schema not found"); } if (Metadata.TryGetValue("avro.codec", out var codecBytes)) { if (Enum.TryParse <Codec>(Encoding.UTF8.GetString(codecBytes), true, out var codec)) { Codec = codec; } else { throw new Exception("Codec not found"); } } else { Codec = null; } Sync = decoder.ReadFixed(16); FileHeaderSize = stream.Position; } }