Example #1
0
 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");
                }
        }
Example #3
0
        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;
                }
        }