GZipStream解压缩问题 [英] GZipStream decompression issue
问题描述
我们使用GZipStream对MemoryStream数据进行压缩和解压缩。解压缩的数据将输入到DataContract序列化程序,后者将XML转换为.NET对象。最近我们在DataContract反序列化期间遇到了一个问题。当我们分析
的解压缩数据时,它的字符很糟糕。解压后变坏的原因是什么?
public 静态跨度> 的流跨度>  GetStreamFromBlob(的 MyBlob 跨度>  BLOB)
        {
&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;的流跨度>&NBSP; originalStream&NBSP; =&NBSP; blob.GetStream(的 BlobMode 跨度>。开,&NBSP; <跨度风格= "颜色:#2b91af">的FileAccess 跨度> .Read);
&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;的流跨度>&NBSP; decompressedStream&NBSP; =&NBSP; < span style ="color:blue"> new MemoryStream ();
using ( var zipStream = new GZipStream (
&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP; originalStream,
&NBSP;&NBSP;&NBSP;&NBSP;&NBSP; &NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;的 CompressionMode 跨度> .Decompress))
&NBSP;&NBSP;&NBSP; &NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP; {
&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP ;的尝试跨度>
&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP; {
&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP; zipStream.CopyTo(decompressedStream);
&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;}
&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP ;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;的捕获跨度>&NBSP;(的 InvalidDataException < /跨度>)
&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP; {
&NBSP;&NBSP;&NBSP;&NBSP ;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP; originalStream.Position&NBSP; =&NBSP; 0;
&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP; originalStream.CopyTo(decompressedStream);
&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;}
&NBSP;&NBSP;&NBSP;&NBSP ;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP; decompressedStream.Position&NBSP; =&NBSP; 0;
&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;的返回跨度>&NBSP ; decompressedStream;
&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;}
&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;}
部分解压缩数据:
< a:anyType z:Id =" i18569" I:式= QUOT; B:CallIdElem%NT"的xmlns:B =" myNameSpace对象">
它应该是:
<一个:anyType的Z:编号= QUOT; i18569" I:式= QUOT; B:CallIdElement"的xmlns:B =" myNameSpace对象">
压缩或早期阶段的数据可能会受到影响吗?
WE use GZipStream for compression and decompression of MemoryStream data. Decompressed data will be input to DataContract serializer, which converts XML to .NET objects. Recently we encountered a problem during DataContract deserialization. When we analyzed the decompressed data, it had a bad character in it. What could be reason for getting bad character after decompression?
public static Stream GetStreamFromBlob(MyBlob blob) { Stream originalStream = blob.GetStream(BlobMode.Open, FileAccess.Read); Stream decompressedStream = new MemoryStream(); using (var zipStream = new GZipStream( originalStream, CompressionMode.Decompress)) { try { zipStream.CopyTo(decompressedStream); } catch (InvalidDataException) { originalStream.Position = 0; originalStream.CopyTo(decompressedStream); } decompressedStream.Position = 0; return decompressedStream; } }
Part of decompressed data:
<a:anyType z:Id="i18569" i:type="b:CallIdElem%nt" xmlns:b="MyNamespace">
It should have been:
<a:anyType z:Id="i18569" i:type="b:CallIdElement" xmlns:b="MyNamespace">
Maybe the data were affected on compression or earlier stages?
这篇关于GZipStream解压缩问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!