两端代码:用于压缩的
(1)  private byte[] myCompress(byte[] data)
    {
        MemoryStream ms = new MemoryStream();
        GZipStream compressStream = new GZipStream(ms, CompressionMode.Compress, true);
        compressStream.Write(data, 0, data.Length);
        compressStream.Close();
        ms.Close();        return ms.ToArray(); //直接返回
    }
(2)  private byte[] Compress(byte[] data)
        {
            MemoryStream ms = new MemoryStream();
            GZipStream compressStream =  = new GZipStream(ms, CompressionMode.Compress, true);
            compressStream.Write(data, 0, data.Length);
            compressStream.Close();            ms.Position = 0;  
            byte[] compressed_data = new byte[ms.Length]; //把流中的内容再写入到一个新的字节数组
            ms.Read(compressed_data, 0, int.Parse(ms.Length.ToString()));
            return compressed_data;
        }
我自己写的代码是第一段,但我见过别人按第二种方式写的,直接返回ms.ToArray()好像也是可以的,
为什么第二段还要额外写那么多代码ms.Read(compressed_data, 0, int.Parse(ms.Length.ToString()))用这种方式再把流写入一个字节数组返回呢?
是不是其中另有蹊跷?

解决方案 »

  1.   

    第一个不行吧。返回类型不匹配啊。。、
       byte[] compressed_data = new byte[ms.Length]; //把流中的内容再写入到一个新的字节数组 
                ms.Read(compressed_data, 0, int.Parse(ms.Length.ToString())); 
                return compressed_data; 
    private byte[] Compress(byte[] data) 这里要求是返回一个byte[]类型的
      

  2.   

    下面只是放到一个byte[]数组而已。为了与返回类型相匹配
    至于第一个会不会出异常你自己试一下就知道了
      

  3.   

    第一个可以阿
    ms.ToArray()返回的是byte[]
      

  4.   

    第一种方法完全可以,没必要再把MemoryStream中的数据再拷贝到新数组中