Java解压缩用zlib deflate压缩的字符串

Java解压缩用zlib deflate压缩的字符串,java,zlib,deflate,Java,Zlib,Deflate,正如标题所说。如何解压缩使用zlib deflate压缩的压缩字符串?什么是解释的可靠方法?我在谷歌上找到了一篇文章,它解释了如何使用zlib在java中进行压缩和解压缩,希望它能帮助您尝试一下-这是一个简单的工作示例: package zlib.example; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.util.Arrays; import java.util

正如标题所说。如何解压缩使用zlib deflate压缩的压缩字符串?什么是解释的可靠方法?

我在谷歌上找到了一篇文章,它解释了如何使用zlib在java中进行压缩和解压缩,希望它能帮助您尝试一下-这是一个简单的工作示例:

package zlib.example;

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.util.Arrays;
import java.util.zip.Deflater;
import java.util.zip.DeflaterOutputStream;
import java.util.zip.InflaterInputStream;

/**
 * Created by keocra on 08.10.15.
 */
public class Main {
    private final static String inputStr = "Hello World!";

    public static void main(String[] args) throws Exception {
        System.out.println("Will zlib compress following string: " + inputStr);

        // will compress "Hello World!"
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        DeflaterOutputStream dos = new DeflaterOutputStream(baos);
        dos.write(inputStr.getBytes());
        dos.flush();
        dos.close();

        // at this moment baos.toByteArray() holds the compressed data of "Hello World!"

        // will decompress compressed "Hello World!"
        ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray());
        InflaterInputStream iis = new InflaterInputStream(bais);

        String result = "";
        byte[] buf = new byte[5];
        int rlen = -1;
        while ((rlen = iis.read(buf)) != -1) {
            result += new String(Arrays.copyOf(buf, rlen));
        }

        // now result will contain "Hello World!"

        System.out.println("Decompress result: " + result);
    }
}
您还应该能够轻松地扩展此示例以压缩/解压缩文件

希望有帮助;-)

进一步阅读:


请更具体地说明您想做什么。上面的示例没有绑定到特定的字符串长度。需要明确的是:更改inputStr应该足够了。如果您想调整示例,还应该将字节缓冲区(…新字节[5])更改为新字节[1024]。那么字节[]buf在做什么?我回答这个问题有点晚;-)字节[]buf=新字节[5];初始化空字节数组,该数组用作从输入流读取的缓冲区。然后每轮从输入流中读取最多5个字节。copyOf(buf,rlen)只是将实际读取的字节数变大。例如,假设输入流中有23个字节。每轮读取5个字节将导致4轮实际读取5个字节,最后一轮读取3个字节。因此,在上一轮中,我们只对来自buf对象的3个字节感兴趣。