Example #1
0
        public FileWriter(Header header, IAvroWriter <T> writer, long maxBlockCount = 1000)
        {
            if (header.Schema.ToAvroCanonical() != writer.WriterSchema.ToAvroCanonical())
            {
                throw new ArgumentException("Incompatible DatumWriter");
            }

            _header          = header;
            _writer          = writer;
            _maxBlockCount   = maxBlockCount;
            _serializeStream = new MemoryStream(1024 * 1024);
            _encoder         = new BinaryEncoder(_serializeStream);

            _fileStream = _header.FileInfo.Open(FileMode.CreateNew, FileAccess.Write, FileShare.Read);

            using (var encoding = new BinaryEncoder(_fileStream))
            {
                encoding.WriteFixed(_header.Magic);
                encoding.WriteMap(_header.Metadata, (s, v) => s.WriteBytes(v));
                encoding.WriteFixed(_header.Sync);
            }
            _fileStream.Flush();
        }
Example #2
0
        private void WriteBlock()
        {
            _serializeStream.Flush();
            var data = Compress(_serializeStream.GetBuffer(), (int)_serializeStream.Position, _header.Codec);

            using (var encoding = new BinaryEncoder(_fileStream))
            {
                encoding.WriteLong(_count);
                encoding.WriteLong(data.Length);
                _fileStream.Write(data);
                encoding.WriteFixed(_header.Sync);
            }
            _count = 0;
            _serializeStream.Seek(0, SeekOrigin.Begin);
        }