GZipStream解压缩问题 [英] GZipStream decompression issue

查看:208
本文介绍了GZipStream解压缩问题的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我们使用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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆