public Read ( byte buffer, int offset, int count ) : int | ||
buffer | byte | The buffer into which the read data should be placed. |
offset | int | the offset within that data array to put the first byte read. |
count | int | the number of bytes to read. |
return | int |
public static byte[] DecompressDeflate(Stream input) { using (var decompressor = new DeflateStream(input, CompressionMode.Decompress)) { var buffer = new byte[BufferSize]; using (var output = new MemoryStream()) { int read; while ((read = decompressor.Read(buffer, 0, buffer.Length)) > 0) { output.Write(buffer, 0, read); } return output.ToArray(); } } }
public void Zlib_ParallelDeflateStream() { var sw = new System.Diagnostics.Stopwatch(); sw.Start(); TestContext.WriteLine("{0}: Zlib_ParallelDeflateStream Start", sw.Elapsed); int sz = 256*1024 + this.rnd.Next(120000); string FileToCompress = System.IO.Path.Combine(TopLevelDir, String.Format("Zlib_ParallelDeflateStream.{0}.txt", sz)); CreateAndFillFileText( FileToCompress, sz); TestContext.WriteLine("{0}: Created file: {1}", sw.Elapsed, FileToCompress ); byte[] original = File.ReadAllBytes(FileToCompress); int crc1 = DoCrc(FileToCompress); TestContext.WriteLine("{0}: Original CRC: {1:X8}", sw.Elapsed, crc1 ); byte[] working = new byte[WORKING_BUFFER_SIZE]; int n = -1; long originalLength; MemoryStream ms1 = new MemoryStream(); { using (FileStream fs1 = File.OpenRead(FileToCompress)) { originalLength = fs1.Length; using (var compressor = new Ionic.Zlib.ParallelDeflateOutputStream(ms1, true)) { while ((n = fs1.Read(working, 0, working.Length)) != 0) { compressor.Write(working, 0, n); } } } ms1.Seek(0, SeekOrigin.Begin); } TestContext.WriteLine("{0}: Compressed {1} bytes into {2} bytes", sw.Elapsed, originalLength, ms1.Length); var crc = new Ionic.Crc.CRC32(); int crc2= 0; byte[] decompressedBytes= null; using (MemoryStream ms2 = new MemoryStream()) { using (var decompressor = new DeflateStream(ms1, CompressionMode.Decompress, false)) { while ((n = decompressor.Read(working, 0, working.Length)) != 0) { ms2.Write(working, 0, n); } } TestContext.WriteLine("{0}: Decompressed", sw.Elapsed); TestContext.WriteLine("{0}: Decompressed length: {1}", sw.Elapsed, ms2.Length); ms2.Seek(0, SeekOrigin.Begin); crc2 = crc.GetCrc32(ms2); decompressedBytes = ms2.ToArray(); TestContext.WriteLine("{0}: Decompressed CRC: {1:X8}", sw.Elapsed, crc2 ); } TestContext.WriteLine("{0}: Checking...", sw.Elapsed ); bool check = true; if (originalLength != decompressedBytes.Length) { TestContext.WriteLine("Different lengths."); check = false; } else { for (int i = 0; i < decompressedBytes.Length; i++) { if (original[i] != decompressedBytes[i]) { TestContext.WriteLine("byte {0} differs", i); check = false; break; } } } Assert.IsTrue(check,"Data check failed"); TestContext.WriteLine("{0}: Done...", sw.Elapsed ); }
public void Zlib_ParallelDeflateStream2() { var sw = new System.Diagnostics.Stopwatch(); sw.Start(); TestContext.WriteLine("{0}: Zlib_ParallelDeflateStream2 Start", sw.Elapsed); int sz = (128 * 1024) /*default buffer size*/ * rnd.Next(14, 28); using (Stream s = new MemoryStream()) { TestContext.WriteLine("{0}: Creating zip...", sw.Elapsed); using (Stream compressor = new Ionic.Zlib.ParallelDeflateOutputStream(s, true)) compressor.Write(new byte[sz], 0, sz); s.Position = 0; TestContext.WriteLine("{0}: Trying to extract...", sw.Elapsed); using (Stream decompressor = new Ionic.Zlib.DeflateStream(s, Ionic.Zlib.CompressionMode.Decompress, true)) { try { int bread = decompressor.Read(new byte[sz], 0, sz); Assert.AreEqual(sz, bread, "Size of decompressed bytes does not match size of input bytes"); } catch (Ionic.Zlib.ZlibException) { Assert.Fail("ParallelDeflate failed"); } } } TestContext.WriteLine("{0}: Done...", sw.Elapsed); }
/*static void decompress() { decompress("C:/users/Luciano/Desktop/manifest.bin"); }*/ static void decompress(string inputfile, string outputPath) { FileStream f = File.Open(inputfile, FileMode.Open); FileStream final = File.Create(outputPath); StreamReader reader = new StreamReader(f); StreamWriter writer = new StreamWriter(final); DeflateStream a = new DeflateStream(f, CompressionMode.Decompress); int read = 0; byte[] buffer = new byte[1024 * 1024]; f.Position = 10; while ((read = a.Read(buffer, 0, buffer.Length)) > 0) { final.Write(buffer, 0, read); } f.Close(); a.Close(); final.Close(); }
public static void compress() { FileStream f = File.Open("C:/users/Luciano/Desktop/manifest.txt", FileMode.Open, FileAccess.ReadWrite); FileStream final = File.Create("C:/users/Luciano/Desktop/manifest.bin"); int size = (int)f.Length; StreamReader r = new StreamReader(f); BinaryWriter w = new BinaryWriter(final); w.Write("l33t".ToCharArray()); w.Write(size); w.BaseStream.WriteByte(0x78); w.BaseStream.WriteByte(0x9C); DeflateStream a = new DeflateStream(f, CompressionMode.Compress); int read = 0; byte[] buffer = new byte[1024 * 1024]; while ((read = a.Read(buffer, 0, buffer.Length)) > 0) { w.Write(buffer, 0, read); } a.Close(); f.Close(); }