测试了下.NET下的GZIPStream好象不行谁能解决送2000分吧:)

解决方案 »

  1.   


    问题解决的,给2000分我啊。测试通过的代码,供大家参考:private byte[] CompressFile(FileStream fs)
            {
                byte[] buffer = new byte[fs.Length];
                fs.Read(buffer, 0, (int)fs.Length);
                MemoryStream ms = new MemoryStream();            GZipStream gZipStream = new GZipStream(ms, CompressionMode.Compress);
               
                gZipStream.Write(buffer,0,buffer.Length);
                
                gZipStream.Close();
                ms.Flush();
               byte[] data= ms.ToArray();
                ms.Close();
                return data;
            }
           
            private void DecompressFile(byte[] stream, string file)
            {
                MemoryStream ms = new MemoryStream(stream);
                GZipStream gzipStream = null;
                FileStream fs = null;
                try
                {
                     gzipStream = new GZipStream(ms, CompressionMode.Decompress);
                     fs = new FileStream(file, FileMode.Create, FileAccess.Write, FileShare.Write);
                     int length = ReadAllBytesFromStream(gzipStream, fs);
              
                     fs.Flush();
                }
                catch (Exception e)
                {            }
                finally
                {
                    ms.Close();
                    fs.Close();
                    gzipStream.Close();
                }
                    
                }
           
            private static int ReadAllBytesFromStream(Stream stream, FileStream fs)
            {
                
                int offset = 0;
                int totalCount = 0;
                while (true)
                {
                    byte[] buffer = new byte[1000];
                    int bytesRead = stream.Read(buffer, 0, 1000);
                    if (bytesRead == 0)
                    {
                        break;
                    }
                    fs.Write(buffer, 0, bytesRead);
                    offset += bytesRead;
                    totalCount += bytesRead;
                }
                return totalCount;
            }
      

  2.   

    我有一个不知道是不是你要的那种
    我现在还没明白解压PDF是什么意思!
      

  3.   

    GZip和Zip是2种 可以用SharpZipLib 
      

  4.   

    在.Net Framework 2.0 中添加了System.IO.Compression 类来实现对文件的压缩/解压(GZipStream方法)http://www.cnblogs.com/AndyHuang/archive/2009/02/05/1384388.html
      

  5.   

    晕啊...不是 你用文本打开PDF文件 里面的stream开始和endobject结束..我不知道怎么解这个... 想找个方法解开.
      

  6.   

    这个要求没做过,楼主是不是想将PDF内的内容给截取出来啊?
    这个不晓得是否有用:
    http://zlping.javaeye.com/blog/308461
      

  7.   


    非常感谢...内说里面的stream是什么压缩的:(
      

  8.   

    以前用.net生成PDF时是用的iTextSharp来实现的,不晓得是否能用iTextSharp反向来实现楼主的要求,晚上回去试试看。
      

  9.   

    继续顶...谁能告诉我 PDF 里的 STREAM 到底是怎么压缩的..或则怎么还原的...网络上有人说是LZW ..到底是什么啊
      

  10.   

    stream怎么压缩的,要看trailer部分的描述
    一般而言是flate,如果是加密的PDF,还要先解密,trailer里面有加密信息的描述
      

  11.   

    就算你把这个解压了,你还要分析相当复杂的PDF语法
    stream起两个作用,是加密,而是压缩,解压后的明文才是PDF语法,如何解析PDF语法,这个才是难点你现在才是文件的物理结构分析阶段,要提取内容还有很长得路要走啊
      

  12.   

    stream前面都有个filter,这个指示了当前stream是采用什么压缩算法
      

  13.   


    1430 0 obj<</Length 3342/Filter/FlateDecode>>stream ??? endstream endobj例如我获取到一个这样的OBJ 怎么解压呢.. 
      

  14.   

    就是啊 zip .NET用什么解压呢...GZIP是不行了
      

  15.   

    或许是你使用有问题
    stream之间的数据是二进制,打开文件读取的时候一定要以二进制方式打开,你看看是不是这个问题
      

  16.   

    继续顶下...谁有简单的对ZIP操作STREAM 的例子
      

  17.   

    已经是提取出stream之间的2进制数据的了,放到6楼的几个函数里面用,第3个函数是会报错的,感觉上就是这种解压方式不对..
    6楼的几个函数我改了一下才能用..        private byte[] CompressFile(FileStream fs)  //加压
            {
                byte[] buffer = new byte[fs.Length];
                fs.Read(buffer, 0, (int)fs.Length);
                MemoryStream ms = new MemoryStream();            GZipStream gZipStream = new GZipStream(ms, CompressionMode.Compress);            gZipStream.Write(buffer, 0, buffer.Length);            gZipStream.Close();
                ms.Flush();
                byte[] data = ms.ToArray();
                ms.Close();
                return data;
            }        private void DecompressFile(byte[] stream, string file) //解压
            {
                MemoryStream ms = new MemoryStream(stream);
                GZipStream gzipStream = new GZipStream(ms, CompressionMode.Decompress);
                FileStream fs = null;
                try
                {
                    gzipStream = new GZipStream(ms, CompressionMode.Decompress);
                    fs = new FileStream(file, FileMode.Create, FileAccess.Write, FileShare.Write);
                    int length = ReadAllBytesFromStream(gzipStream, fs);                fs.Flush();
                }
                catch (Exception e)
                {
                    MessageBox.Show(e.ToString());
                }
                finally
                {
                    ms.Close();
                    fs.Close();
                    gzipStream.Close();
                }
            }        private static int ReadAllBytesFromStream(Stream stream, FileStream fs) //流 to 文件
            {
                int offset = 0;
                int totalCount = 0;
                int size = 100;    //10759
                byte[] buffer = new byte[1928 + size];//要解压的流的长度+size  //1928
                while (true)
                {
                    int bytesRead = stream.Read(buffer, offset, size);
                    if (bytesRead == 0)
                    {
                        break;
                    }
                    fs.Write(buffer, offset, bytesRead);
                    offset += bytesRead;
                    totalCount += bytesRead;
                }
                return totalCount;
            }
      

  18.   

    这问题还有人关注吗?
    1430 0 obj<</Length 3342/Filter/FlateDecode>>stream ??? endstream endobj/Filter/FlateDecode 说明是使用FlateDecodeFlateDecode yes (PDF 1.2) Decompresses data encoded using the zlib/deflate compression
    method, reproducing the original text or binary data.如何判断应使用zlib还是deflate来解压缩呢?
      

  19.   

    我想用c++解压stream ??? endstream endobj中间的东西,有哪位兄弟姐妹做过的加我QQ465461081,万分感谢!!