private void WriteBitString(FileEncodingOutputStream stream, string bitString) { Bit[] bits = TestHelper.BitsFromString(bitString); for (int n = 0; n < bits.Length; n++) { stream.WriteBit(bits[n]); } }
public void SaveRestorePositionTest1() { MemoryStream memoryStream = new MemoryStream(); using (FileEncodingOutputStream stream = CreateFileEncodingOutputStream(memoryStream)) { IStreamPosition position = stream.SavePosition(); Assert.IsNotNull(position); stream.RestorePosition(position); WriteBitString(stream, "11111111"); Assert.AreEqual(new byte[] { 0xFF }, memoryStream.ToArray()); } }
public void WriteBitTest2() { MemoryStream memoryStream = new MemoryStream(); using (FileEncodingOutputStream stream = CreateFileEncodingOutputStream(memoryStream)) { Bit[] bits = TestHelper.BitsFromString("01111001101"); stream.BeginWrite(); for (int n = 0; n < bits.Length; n++) { stream.WriteBit(bits[n]); } stream.EndWrite(); } Assert.AreEqual(new byte[] { 0x9E, 0x5 }, memoryStream.ToArray()); }
private EncodingStatistics Encode(string inputPath, string outputFile, CancellationToken cancellationToken, IProgress <CodingProgressInfo> progress) { HuffmanEncoder encoder = new HuffmanEncoder(); DirectoryEncodingInputStream directoryInputStream = new DirectoryEncodingInputStream(inputPath, fileSystemService, platform); FileEncodingOutputStream outputStream = new FileEncodingOutputStream(outputFile, platform); ITaskProgressController tpc = CreateTaskProgressController(progress, directoryInputStream); try { outputStream.BeginWrite(); tpc.StartIndeterminate(); EncodingToken encodingToken = encoder.CreateEncodingToken(directoryInputStream, cancellationToken); tpc.EndIndeterminate(); streamBuilder.Initialize(platform, encodingToken, outputStream); streamBuilder.AddWeightsTable(new BootstrapSegment(encodingToken.WeightsTable)); tpc.Start(); foreach (FileSystemEntry entry in fileSystemService.EnumFileSystemEntries(inputPath)) { switch (entry.Type) { case FileSystemEntryType.Directory: streamBuilder.AddDirectory(new DirectorySegment(entry.Name, entry.Cardinality)); break; case FileSystemEntryType.File: streamBuilder.AddFile(new FileSegment(entry.Name, entry.Path), cancellationToken, tpc); break; default: throw new InvalidOperationException(); } } outputStream.EndWrite(); tpc.Finish(); return(new EncodingStatistics(directoryInputStream.SizeInBytes, outputStream.SizeInBytes)); } catch { tpc.Error(); throw; } finally { directoryInputStream.Dispose(); outputStream.Dispose(); } }
private byte[] Encode(byte[] data, out HuffmanTreeBase tree, out long streamSize) { MemoryStream outputMemoryStream = new MemoryStream(); FileEncodingInputStream inputStream = CreateFileEncodingInputStream(data); FileEncodingOutputStream outputStream = CreateFileEncodingOutputStream(outputMemoryStream); HuffmanEncoder encoder = new HuffmanEncoder(); try { outputStream.BeginWrite(); EncodingToken token = encoder.CreateEncodingToken(inputStream, CancellationToken.None); streamSize = encoder.Encode(inputStream, outputStream, token, CancellationToken.None, null); outputStream.EndWrite(); tree = token.HuffmanTree; return(outputMemoryStream.ToArray()); } finally { inputStream.Dispose(); outputStream.Dispose(); } }
public void SaveRestorePositionTest2() { MemoryStream memoryStream = new MemoryStream(); using (FileEncodingOutputStream stream = CreateFileEncodingOutputStream(memoryStream)) { IStreamPosition p1 = stream.SavePosition(); WriteBitString(stream, "11111111"); IStreamPosition p2 = stream.SavePosition(); WriteBitString(stream, "00000000"); IStreamPosition p3 = stream.SavePosition(); WriteBitString(stream, "11111111"); IStreamPosition p4 = stream.SavePosition(); stream.RestorePosition(p2); WriteBitString(stream, "10010110"); stream.RestorePosition(p1); WriteBitString(stream, "10011001"); stream.RestorePosition(p4); WriteBitString(stream, "00000001"); stream.RestorePosition(p3); WriteBitString(stream, "00001111"); Assert.AreEqual(new byte[] { 0x99, 0x69, 0xF0, 0x80 }, memoryStream.ToArray()); } }
public void RestorePositionGuardTest() { using (FileEncodingOutputStream stream = CreateFileEncodingOutputStream(new MemoryStream())) { Assert.Throws <ArgumentNullException>(() => stream.RestorePosition(null)); } }