public static DemoHeader Read(Stream stream) { DemoHeader header; using (var reader = new BinaryReader(stream, Encoding.Default, true)) { var baseHeader = Read(reader); var customHeader = DemoCustomHeader.Read(reader); header = new DemoHeader(baseHeader.Identifier, baseHeader.SchemaVersion, baseHeader.DataVersion, baseHeader.Source, baseHeader.CreationTimeTicks, baseHeader.Assembly, customHeader); } return(header); }
public void BlockStream_EndToEnd() { string expectedString = GetRandomString(Block.DefaultSize + 10000); var customHeader = new DemoCustomHeader(-1, -1); var header = new DemoHeader(CacheConstants.Identifier, CacheConstants.SchemaVersion, CacheConstants.DataVersion, Source.Ensembl, NumTicks, ExpectedAssembly, customHeader); using (var ms = new MemoryStream()) { WriteBlockStream(Zstd, header, customHeader, ms, expectedString); ms.Position = 0; ReadFromBlockStream(Zstd, ms, expectedString); } }
// ReSharper disable once UnusedParameter.Local private static void ReadFromBlockStream(ICompressionAlgorithm compressionAlgorithm, Stream ms, string expectedRandomString) { // grab the header var header = DemoHeader.Read(ms); Assert.Equal(ExpectedAssembly, header.Assembly); using (var blockStream = new BlockStream(compressionAlgorithm, ms, CompressionMode.Decompress)) using (var reader = new ExtendedBinaryReader(blockStream)) { CheckWriteException(blockStream); // sequential string check CheckString(reader, expectedRandomString); CheckString(reader, SmallString); CheckString(reader, FinalString); // random access string check blockStream.SetBlockPosition(header.Custom.FileOffset, header.Custom.InternalOffset); //reader.Reset(); CheckString(reader, SmallString); } }
private static void WriteBlockStream(ICompressionAlgorithm compressionAlgorithm, DemoHeader header, DemoCustomHeader customHeader, Stream ms, string s) { using (var blockStream = new BlockStream(compressionAlgorithm, ms, CompressionMode.Compress, true)) using (var writer = new ExtendedBinaryWriter(blockStream)) { CheckReadException(blockStream); blockStream.WriteHeader(header.Write); writer.WriteOptAscii(s); (customHeader.FileOffset, customHeader.InternalOffset) = blockStream.GetBlockPosition(); Assert.Equal(customHeader.FileOffset, blockStream.Position); writer.WriteOptAscii(SmallString); blockStream.Flush(); // this will be flushed during dispose writer.WriteOptAscii(FinalString); } }