我可能是错的,但这就是我对Node的createGzip()
的理解:
- 我可以
stream.write()
-它在流中累积数据, - “压缩”过程只在调用
stream.end()
时发生-然后Gzip根据流中的内容执行它的魔术并卸载所有内容。
这需要相当大的内存量,因为在调用end()
之前,stream必须保存所有内容。
我是否可以用某种方法在少量数据上“训练”gzip(我的意思是训练它如何压缩数据。我的数据在整个数据集中都有类似的模式),然后不需要等待stream.end()
就可以通过它传输所有内容?
我想压缩~ 100 GB的数据和流只是无法积累那么多,由于运行时的内存限制。
1条答案
按热度按时间kxxlusnw1#
Node的zlib实现就像一篇文章中描述的那样工作,它在调用
end()
之前在缓冲区中累积所有数据。一个解决方案是使用
pako
包,这是定制的zlib Package 器。它不支持流的开箱即用,但是你可以覆盖
onData()
方法,很容易地把它转换成流,这样你就可以实现真正的流压缩。