コード例 #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();
        }
コード例 #2
0
 public void WriteError <T>(IAvroEncoder encoder, string message, T error) where T : class
 {
     _protocolPair.ErrorWriters[message].Write(encoder, error);
 }
コード例 #3
0
 public void WriteReponse <T>(IAvroEncoder encoder, string message, T response) where T : class
 {
     _protocolPair.ResponseWriters[message].Write(encoder, response);
 }
コード例 #4
0
 public void WriteRequest <T>(IAvroEncoder encoder, string message, T record) where T : class, IAvroRecord
 {
     _protocolPair.RequestWriters[message].Write(encoder, record);
 }
コード例 #5
0
 void IAvroObject.Encode(IAvroEncoder encoder)
 {
     throw new NotImplementedException();
 }
コード例 #6
0
 public void Write(IAvroEncoder stream, T value) => _writer.Invoke(stream, value);