我的客户端具有一个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
}
当然是简化的。您需要正确初始化放气,处理空的迭代器,用线路断开等弦等,等等。