public static void MemoryBufferStream_AsyncPatternRead_SmallBuffer() { ReadOnlyMemory <byte> truth = GenerateSegment(13, 203, 1).AsReadOnlyMemory(); var buffer = new byte[100]; using (var sut = new MemoryBufferStream(truth)) { Assert.Equal(50, sut.SyncAsyncRead(buffer, 0, 50)); Assert.Equal(buffer.AsReadOnlyMemory().Slice(0, 50), truth.Slice(0, 50), BufferComparer.Memory); Assert.Equal(100, sut.SyncAsyncRead(buffer, 0, 100)); Assert.Equal(buffer.AsReadOnlyMemory(), truth.Slice(50, 100), BufferComparer.Memory); Assert.Equal(53, sut.SyncAsyncRead(buffer, 0, 100)); Assert.Equal(buffer.AsReadOnlyMemory().Slice(0, 53), truth.Slice(150, 53), BufferComparer.Memory); // Ensure nothing was copied. Assert.Equal(0, sut.SyncAsyncRead(buffer, 0, 100)); Assert.Equal(buffer.AsReadOnlyMemory().Slice(0, 53), truth.Slice(150, 53), BufferComparer.Memory); Assert.Equal(0, sut.SyncAsyncRead(buffer, 0, 100)); Assert.Equal(buffer.AsReadOnlyMemory().Slice(0, 53), truth.Slice(150, 53), BufferComparer.Memory); } }
public static async Task MemoryBufferStream_ReadAsync_SmallBuffer() { ReadOnlyMemory <byte> truth = GenerateSegment(13, 203, 1).AsReadOnlyMemory(); var buffer = new byte[100]; using (var sut = new MemoryBufferStream(truth)) { Assert.Equal(50, await sut.ReadAsync(buffer, 0, 50)); Assert.Equal(buffer.AsReadOnlyMemory().Slice(0, 50), truth.Slice(0, 50), BufferComparer.Memory); Assert.Equal(100, await sut.ReadAsync(buffer)); Assert.Equal(buffer.AsReadOnlyMemory(), truth.Slice(50, 100), BufferComparer.Memory); Assert.Equal(53, await sut.ReadAsync(buffer)); Assert.Equal(buffer.AsReadOnlyMemory().Slice(0, 53), truth.Slice(150, 53), BufferComparer.Memory); // Ensure nothing was copied. Assert.Equal(0, await sut.ReadAsync(buffer)); Assert.Equal(buffer.AsReadOnlyMemory().Slice(0, 53), truth.Slice(150, 53), BufferComparer.Memory); Assert.Equal(0, await sut.ReadAsync(buffer)); Assert.Equal(buffer.AsReadOnlyMemory().Slice(0, 53), truth.Slice(150, 53), BufferComparer.Memory); } }
public static void MemoryBufferStream_CopyAsync() { ReadOnlyMemory <byte> truth = GenerateSegment(13, 99834, 1).AsReadOnlyMemory(); using (var sut = new MemoryBufferStream(truth)) using (var ms = new MemoryStream()) { sut.CopyToAsync(ms, 500); var buf = ms.ToArray(); Assert.Equal(truth, buf.AsReadOnlyMemory(), BufferComparer.Memory); Assert.Equal(truth.Length, sut.Position); } }
public static void MemoryBufferStream_ReadByte() { ReadOnlyMemory <byte> truth = GenerateSegment(13, 107, 1).AsReadOnlyMemory(); using (var sut = new MemoryBufferStream(truth)) { for (var i = 0; i < truth.Length; i++) { Assert.Equal(truth.Span[i], sut.ReadByte()); } Assert.Equal(-1, sut.ReadByte()); Assert.Equal(-1, sut.ReadByte()); } }
public static void MemoryBufferStream_Read_BigBuffer() { ReadOnlyMemory <byte> truth = GenerateSegment(13, 107, 1).AsReadOnlyMemory(); var buffer = new byte[1024]; using (var sut = new MemoryBufferStream(truth)) { Assert.Equal(107, sut.Read(buffer)); Assert.Equal(buffer.AsReadOnlyMemory().Slice(0, 107), truth, BufferComparer.Memory); for (var i = 107; i < 1024; i++) { Assert.Equal(0, buffer[i]); } Assert.Equal(0, sut.Read(buffer)); Assert.Equal(buffer.AsReadOnlyMemory().Slice(0, 107), truth, BufferComparer.Memory); } }
public static void MemoryBufferStream_AsyncPatternRead_BigBuffer() { var truth = BufferComparerTests.GenerateSegment(13, 107, 1).AsReadOnlyMemory(); var buffer = new byte[1024]; using (var sut = new MemoryBufferStream(truth)) { Assert.Equal(107, sut.SyncAsyncRead(buffer, 0, 1024)); Assert.Equal(buffer.AsReadOnlyMemory().Slice(0, 107), truth, BufferComparer.Memory); for (var i = 107; i < 1024; i++) { Assert.Equal(0, buffer[i]); } Assert.Equal(0, sut.SyncAsyncRead(buffer, 0, 1024)); Assert.Equal(buffer.AsReadOnlyMemory().Slice(0, 107), truth, BufferComparer.Memory); } }
public static async Task MemoryBufferStream_ReadAsync_BigBuffer() { var truth = BufferComparerTests.GenerateSegment(13, 107, 1).AsReadOnlyMemory(); var buffer = new byte[1024]; using (var sut = new MemoryBufferStream(truth)) { Assert.Equal(107, await sut.ReadAsync(buffer)); Assert.Equal(buffer.AsReadOnlyMemory().Slice(0, 107), truth, BufferComparer.Memory); for (var i = 107; i < 1024; i++) { Assert.Equal(0, buffer[i]); } Assert.Equal(0, await sut.ReadAsync(buffer)); Assert.Equal(buffer.AsReadOnlyMemory().Slice(0, 107), truth, BufferComparer.Memory); } }
public static void MemoryBufferStream_Seek() { using (var sut = new MemoryBufferStream(new byte[1027])) { Assert.Equal(0, sut.Seek(-100, SeekOrigin.Begin)); Assert.Equal(0, sut.Position); Assert.Equal(0, sut.Seek(0, SeekOrigin.Begin)); Assert.Equal(0, sut.Position); Assert.Equal(100, sut.Seek(100, SeekOrigin.Begin)); Assert.Equal(100, sut.Position); Assert.Equal(1027, sut.Seek(2000, SeekOrigin.Begin)); Assert.Equal(1027, sut.Position); Assert.Equal(927, sut.Seek(-100, SeekOrigin.Current)); Assert.Equal(927, sut.Position); Assert.Equal(1027, sut.Seek(100, SeekOrigin.Current)); Assert.Equal(1027, sut.Position); Assert.Equal(1027, sut.Seek(0, SeekOrigin.Current)); Assert.Equal(1027, sut.Position); Assert.Equal(0, sut.Seek(-2000, SeekOrigin.Current)); Assert.Equal(0, sut.Position); Assert.Equal(927, sut.Seek(-100, SeekOrigin.End)); Assert.Equal(927, sut.Position); Assert.Equal(1027, sut.Seek(100, SeekOrigin.End)); Assert.Equal(1027, sut.Position); Assert.Equal(1027, sut.Seek(0, SeekOrigin.End)); Assert.Equal(1027, sut.Position); Assert.Equal(0, sut.Seek(-2000, SeekOrigin.End)); Assert.Equal(0, sut.Position); } }
public static void MemoryBufferStream_NotSupported() { var sut = new MemoryBufferStream(new byte[10]); Assert.Throws <NotSupportedException>(() => sut.SetLength(10)); Assert.Throws <NotSupportedException>(() => sut.Write(default, default, default));
/// <summary> /// Constructor, initializes the decompression /// </summary> /// <param name="inputStream">Input stream containing the compressed file</param> public SevenZipFileStream(Stream inputStream) { input = inputStream; var magic = new byte[6]; ReadFully(magic); /* int verMaj = */ GetByte(); /* int verMin = */ GetByte(); /* int crc = */ ReadInt(); long headerOfs = ReadUInt64(); /* long headerLen = */ ReadUInt64(); /* int headerCrc = */ ReadInt(); // read headers input.Seek(headerOfs + 0x20, SeekOrigin.Begin); // break inside on kEnd while (true) { byte id = GetByte(); if (id == 0) { break; } else if (id == 1) { // header mark } else if (id == 0x02) { ReadArchiveProperties(); } else if (id == 0x03) { ReadStreamsInfo(); } else if (id == 0x04) { ReadStreamsInfo(); } else if (id == 0x05) { break; //readFilesInfo(); } else { throw new IOException(LibraryResources.UnsupportedFormat); } } // seek to start of data remainingData = folders[0].unpackSize; input.Seek(0x20, SeekOrigin.Begin); /*try { * debugDump = new FileOutputStream("dump.bin"); * } catch(Exception e) {}*/ // launch decompressor decompressionBuffer = new MemoryBufferStream(2097152); decodingThread = new DecodingThread(input, decompressionBuffer, remainingData, folders[0].properties, null, DecompressionError); decodingThread.Start(); }