Node.js zlib.deflate输出太长

时间:2016-05-02 17:20:13

标签: javascript ruby node.js zlib

我试图将我编写的Ruby脚本转换为Node.js,但我的zlib压缩输出是大的(1580字节而不是62 ruby​​给我)。我压缩的内容非常均匀,10,000字节的数据可以是65或122。

红宝石:

rimg = []
(1..100).each do |i|
  (1..100).each do |j|
    rimg << ((j > 20 && j < 30) || (j > 70 && j < 80) ? 65 : 122)
  end
end

zd = Zlib::Deflate.new(Zlib::DEFAULT_COMPRESSION, Zlib::MAX_WBITS)
ximg = zd.deflate(rimg.pack('c*'), Zlib::FINISH)
zd.close
puts "bytesize #{ximg.bytesize}"

Bytesize是62个字节。这是我的JS:

  var rimg = new Buffer(100*100);
  rimg.fill(0);

  for (var i = 1; i <= 100; i++) {
    for (var j = 1; j <= 100; j++) {
      rimg.writeInt8((((j > 20 && j < 30) || (j > 70 && j < 80) ? 65 : 122)), i*j-1);
    }
  }

  Zlib.deflate(rimg, { windowBits: 15 }, function(err, result) {
    console.log('-------')
    console.log(result.length);
  });

输出1580.节点版本为5.1.1。有什么区别?

两者的标题字节是&#34; 78 9C&#34;所以他们应该使用相同的压缩

1 个答案:

答案 0 :(得分:1)

看来你在for循环之后没有检查你的node.js缓冲区,看它是不是你想的那样。您的偏移量是i*j-1?也许你的意思是i*100 + j - 101?或者更好的是,为了避免不必要的计算,只需在for循环之前设置k = 0并进行偏移k++