[
  {
    "Id": "588759",
    "ThreadId": "251779",
    "Html": "\r\n<p><span style=\"color:black; font-size:8.5pt\">I&rsquo;m going to use the <a href=\"http://cheeso.members.winisp.net/DotNetZipHelp/html/433075df-7d0c-2869-3166-76ee1a2bcd17.htm\">\r\nDeflateStream</a> class in the following way:</span></p>\r\n<p><span style=\"color:black; font-size:8.5pt\">1)<span style=\"font:7pt 'Times New Roman'\">&nbsp;&nbsp;&nbsp;\r\n</span></span>Compress something to an underlying stream via DeflateStream.</p>\r\n<p><span style=\"color:black; font-size:8.5pt\">2)<span style=\"font:7pt 'Times New Roman'\">&nbsp;&nbsp;&nbsp;\r\n</span></span>Add some another data to the underlying stream</p>\r\n<p><span style=\"color:black; font-size:8.5pt\">3)<span style=\"font:7pt 'Times New Roman'\">&nbsp;&nbsp;&nbsp;\r\n</span></span>Set position of the underlying stream to 0.</p>\r\n<p><span style=\"color:black; font-size:8.5pt\">4)<span style=\"font:7pt 'Times New Roman'\">&nbsp;&nbsp;&nbsp;\r\n</span></span>Decompress initial data.</p>\r\n<p><span style=\"font-size:11pt\">And now the question &ndash; is the position of DeflateStream always equal to the size of the compressed data created on the step1. So, the data added on the step 2 can be safely read if I set the position of the underlying stream\r\n to the same value.</span></p>\r\n<p>Here&rsquo;s the example of the code.</p>\r\n<p><span style=\"font-size:10pt\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\r\n<span style=\"color:green\">//1</span> <span style=\"color:blue\">var</span> buf1 = <span style=\"color:blue\">\r\nnew</span> <span style=\"color:blue\">byte</span>[100];<br>\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\r\n<span style=\"color:blue\">using</span> (<span style=\"color:blue\">var</span> ds = <span style=\"color:blue\">\r\nnew</span> Ionic.Zlib.DeflateStream(underlyingStream, CompressionMode.Compress, <span style=\"color:blue\">\r\ntrue</span>))<br>\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ds.Write(buf1,0, buf1.Length);<br>\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\r\n<span style=\"color:blue\">var</span> savedPosition = underlyingStream.Position;<br>\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\r\n<span style=\"color:green\">//2</span><br>\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\r\n<span style=\"color:blue\">var</span> buf2 = <span style=\"color:blue\">new</span> <span style=\"color:blue\">\r\nbyte</span>[50];<br>\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; underlyingStream.Write(buf2, 0, buf2.Length);<br>\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\r\n<span style=\"color:green\">//3</span><br>\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; underlyingStream.Position = 0;<br>\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\r\n<span style=\"color:green\">//4</span><br>\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\r\n<span style=\"color:blue\">var</span> buf3 = <span style=\"color:blue\">new</span> <span style=\"color:blue\">\r\nbyte</span>[buf1.Length];<br>\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\r\n<span style=\"color:blue\">using</span> (<span style=\"color:blue\">var</span> ds = <span style=\"color:blue\">\r\nnew</span> Ionic.Zlib.DeflateStream(underlyingStream, CompressionMode.Decompress,\r\n<span style=\"color:blue\">true</span>))<br>\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ds.Read(buf3, 0, buf3.Length);<br>\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\r\n<span style=\"color:blue\">if</span> (savedPosition != ds.Position) <span style=\"color:blue\">\r\nthrow</span> <span style=\"color:blue\">new</span> Exception(<span style=\"color:#a31515\">&quot;The initaial size of the compreassed data is not equal to the readed size.&quot;</span>);<br>\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>\r\n</span></p>\r\n",
    "PostedDate": "2011-03-30T04:53:59.22-07:00",
    "UserRole": null,
    "MarkedAsAnswerDate": null
  }
]