现在做个工具, 使用C++编写, 对文本进行GZIP压缩, 生成的一个JAVA文件, 压缩编码全部放入JAVA文件的byte 数组中.  在JAVA程序用对这个byte 数组进行GZIP解压可以吗?
现在我用JAVA编写GZIP压缩和解压都没有问题的,  但是用C++压缩后的数据无法在JAVA中正常解压. 求教各位大人给予指点

解决方案 »

  1.   

    如果C++的GZip压缩完全符合GZip的标准规范,你可以用
    new GZIPInputStream(new ByteArrayInputStream(buf));
    来开始读取
      

  2.   

    我想大家都知道, 压缩算法中有个重要的ZLIB库吧, 在C++中使用ZLIB对字符压缩了. 但是在JAVA的GZIPInputStream来解压, 不能还原啊. 不知道有哪位高手了解对策?
      

  3.   

    不能还原要看到底的实际原因是什么用GZIPInputStream应该可以正常的解压出byte[]吧?如果可以,那么可能只是C++与Java中的String不匹配罢了。你可以跟踪看看那个byte[]内容是什么,自己想办法恢复成Java中的String
      

  4.   

    另外再问一下GZIPOutputStream中的 write(byte, int, int) 方法中的最后一个参数是指byte的长度吧???  有没有最大限度啊?  我现在测试下来, 2*1024的大小是可以正常压缩和解压的, 但是当byte_size调到3*1024或更高时, 就无法正常解压了. 会丢失了. 有好的解决方法吗?望各位多多指教
      

  5.   

    GZIPOutputStream压缩时, 是不是长度不能超过3*1024?????急切望各位给予答复
      

  6.   

    我测试了半天, java.util.zip.GZIPInputStream 和GZIPOutputStream确实有问题哦, read 和 write方法中的参数 offset 和 len都对对啊, len任意大小似乎有问题的
      

  7.   

    是不是GZIPINPUTSTREAM.read方法有BUG? 有谁知道吗?
      

  8.   

    最后还是我自己来结贴吧第一个问题,由于C++是使用ZLIB进行压缩解压的, 由于C++中没有BYTE类型,不知道其压缩的文件,JAVA是否可以正常解压。第二个问题,使用JAVA的GZIPINPUTSTREAM或GZIPOUTPUTSTREAM时, 建议使用有两个参数的构造方法,指定STREAM流的大小, e.g. (OutputStream, int len)