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; } }
public void DecodeFixed(byte[] expectedValue, int expectedLength, byte[] value) { using (var stream = new MemoryStream(value)) using (var decoder = new BinaryDecoder(stream)) { var decode = decoder.ReadFixed(expectedValue.Length); Assert.AreEqual(expectedLength, stream.Position, "Decode offset error"); Assert.AreEqual(expectedValue, decode); decode = new byte[decode.Length]; stream.Seek(0, SeekOrigin.Begin); decoder.ReadFixed(decode); Assert.AreEqual(expectedLength, stream.Position, "Decode offset error"); Assert.AreEqual(expectedValue, decode); stream.Seek(0, SeekOrigin.Begin); decoder.SkipFixed(expectedValue.Length); Assert.AreEqual(expectedLength, stream.Position, "Skip offset error"); } }
public void TestFixed(byte[] expected) { using (var stream = new MemoryStream()) using (var encoder = new BinaryEncoder(stream)) using (var decoder = new BinaryDecoder(stream)) { encoder.WriteFixed(expected); stream.Seek(0, SeekOrigin.Begin); var actual = decoder.ReadFixed(new byte[expected.Length]); Assert.AreEqual(expected, actual); } }