java.util.Iterator <string>到gzip压缩数据的InputStream

时间:2018-03-30 19:34:23

标签: java streaming java-io

我的客户端有一个API,它将InputStream作为参数,我的数据来自java.util.Iterator,所以基本上我需要将数据从一个Iterator传输到一个InputStream。更重要的是,我想以GZIP格式传输它,所以基本上我需要生成一个带有Iterator gzip的内容的InputStream。

由于我希望尽可能快地提高内存效率,我希望得到一个“流式”解决方案(我已经知道我可以使用GZIPOutputStream将数据写入文件,然后使用FileInputStream读取它)

1 个答案:

答案 0 :(得分:1)

您需要使用Deflater编写自己的逻辑来压缩数据,并且需要实现InputStream,您应该至少实现read(),{{3} }和read(byte[] b, int off, int len)方法。

以下是伪代码,介绍如何实现read

public int read(byte[] b, int off, int len) {
    if deflater finished:
        return -1
    if deflater needs input:
        get next string from iterator
        deflater.setInput(s.getBytes("UTF-8"))
        if iterator at end:
            deflater.finish()
    deflate into b using off and len
}

这当然是简化的。您需要正确初始化deflater,处理空迭代器,使用换行符分隔字符串等。