public void BufferedReaderWriter_Basics()
        {
            Random r = new Random(5);

            byte[] content = new byte[1024];
            r.NextBytes(content);

            byte[] result = new byte[128];

            using (BufferedReader reader = BufferedReader.FromArray(content, 0, content.Length))
                using (BufferedWriter writer = BufferedWriter.ToArray(content))
                {
                    while (!reader.EndOfStream)
                    {
                        int length = reader.EnsureSpace(150);
                        writer.EnsureSpace(length);

                        Buffer.BlockCopy(reader.Buffer, reader.Index, writer.Buffer, writer.Index, length);

                        reader.Index += length;
                        writer.Index += length;
                    }

                    result = writer.Buffer;
                }

            Assert.IsTrue(result.Length >= content.Length);
            for (int i = 0; i < content.Length; ++i)
            {
                Assert.AreEqual(content[i], result[i], $"@{i:n0}, expect: {content[i]}, actual: {result[i]}");
            }
        }
Exemple #2
0
        private void DecompressString()
        {
            if (_decompressReader == null)
            {
                _decompressReader = BufferedReader.FromArray(_reader.Buffer, 0, 0);
                _decompressWriter = BufferedWriter.ToArray(new byte[1024]);
            }

            _decompressReader.ReadSlice(_reader.Buffer, _currentCompressedStringStart, _reader.Index - 1);
            _decompressWriter.Index = 0;

            // Decompress the content
            _compressor.Expand(_decompressReader, _decompressWriter);

            // Make a String8 referencing the full decompressed value
            _currentString = String8.Reference(_decompressWriter.Buffer, 0, _decompressWriter.Index);
        }