Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/391.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用于输入gzip数据流的java.util.Iterator_Java_Streaming_Java Io - Fatal编程技术网

用于输入gzip数据流的java.util.Iterator

用于输入gzip数据流的java.util.Iterator,java,streaming,java-io,Java,Streaming,Java Io,我的客户端有一个以InputStream为参数的API,我的数据来自java.util.Iterator,因此基本上我需要将数据从一个迭代器传输到InputStream。更重要的是,我想以GZIP格式传输它,所以基本上我需要生成一个包含迭代器GZIP内容的InputStream 由于我希望尽可能地提高速度和内存效率,因此我希望有一个流式解决方案,我已经知道,我可以使用GZIPOutputStream将数据写入文件,然后使用FileInputStream读取数据。您需要使用编写自己的逻辑来压缩数据

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


由于我希望尽可能地提高速度和内存效率,因此我希望有一个流式解决方案,我已经知道,我可以使用GZIPOutputStream将数据写入文件,然后使用FileInputStream读取数据。您需要使用编写自己的逻辑来压缩数据,并且需要实现,您至少应该在其中实现、和方法

以下是我对如何实现读取的伪代码的看法:


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

当您的源已经解压缩时,为什么要生成GZIPInputStream,即来自压缩源的未压缩数据流?@Andreas,我想您是对的,我仍然需要一个InputStream,但是使用Gzip压缩数据..所以实际上我需要一种从我的迭代器库Andreas动态生成Gzip的方法,我将研究Deflator。希望平减指数不需要同时使用所有数据…@humbletrader它不需要,这就是为什么伪代码不断为迭代器中的每个字符串调用setInput。当你打最后一个电话时,你也会打电话给finish,告诉泄气器这是最后一部分。
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
}