Exemplo n.º 1
0
        private int Write(Thrift.PageHeader ph, byte[] data)
        {
            int headerSize = ThriftStream.Write(ph);

            _output.Write(data, 0, data.Length);
            return(headerSize);
        }
Exemplo n.º 2
0
        private void WriteValues(SchemaElement schema, IList values, Thrift.PageHeader ph, CompressionMethod compression, ColumnStats stats)
        {
            byte[] data;

            using (var ms = new MemoryStream())
            {
                using (var writer = new BinaryWriter(ms))
                {
                    if (stats.NullCount > 0)
                    {
                        CreateDefinitions(values, schema, out IList newValues, out List <int> definitions);
                        values = newValues;

                        _rleWriter.Write(writer, schema, definitions);
                    }

                    _plainWriter.Write(writer, schema, values);

                    data = ms.ToArray();
                }
            }

            ph.Uncompressed_page_size = data.Length;

            if (compression != CompressionMethod.None)
            {
                IDataWriter writer = DataFactory.GetWriter(compression);
                using (var ms = new MemoryStream())
                {
                    writer.Write(data, ms);
                    data = ms.ToArray();
                }
                ph.Compressed_page_size = data.Length;
            }
            else
            {
                ph.Compressed_page_size = ph.Uncompressed_page_size;
            }

            _thrift.Write(ph);
            _output.Write(data, 0, data.Length);
        }
Exemplo n.º 3
0
        /// <summary>
        /// Finalizes file, writes metadata and footer
        /// </summary>
        public void Dispose()
        {
            if (!_dataWritten)
            {
                return;
            }

            //finalize file
            long size = ThriftStream.Write(_meta.ThriftMeta);

            //metadata size
            Writer.Write((int)size); //4 bytes

            //end magic
            WriteMagic();           //4 bytes

            Writer.Flush();
            _output.Flush();
        }