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);
            }
        }
Beispiel #6
0
        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);
            }
        }
Beispiel #7
0
        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));
Beispiel #10
0
        /// <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();
        }