java.util.Iterator<String> to InputStream of gzip data



我的客户端具有一个API,该API将一个输入流以参数为java.util.iterator,因此基本上我需要将数据从一个迭代器传输到一个inputStream中。更重要的是,我想以GZIP格式进行tran fl缩,所以基本上我需要生成带有迭代器gzped的输入流。

由于我想尽可能快地和内存效率,因此我会喜欢一个"流"解决方案(我已经知道我可以用gzipoutputstream在文件中写入数据,然后用fileinputstream读取它(

您需要使用Deflater编写自己的逻辑来压缩数据,并且您需要实现InputStream,至少应在其中实现read()read(byte[] b, int off, int len)close()方法。p>这是我在伪代码中如何实现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
}

当然是简化的。您需要正确初始化放气,处理空的迭代器,用线路断开等弦等,等等。

最新更新