コード例 #1
0
ファイル: Header.cs プロジェクト: randomravings/avro-dotnet
        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;
                }
        }
コード例 #2
0
        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");
                }
        }
コード例 #3
0
 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);
             }
 }