2016-05-02 4 views
0

私はNode.jsに書き込んだRubyスクリプトを変換しようとしていますが、zlibの圧縮出力は大きなものです(62ルビの代わりに1580バイトです)。Node.js zlib.deflateの出力が長すぎます

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}" 

バイトサイズは62バイトです:私は何を圧縮してるのは非常に均一で、65または122

ルビーのいずれかとすることができるデータの10,000バイトです。ここに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です。違いはなんですか?彼らは同じ圧縮に

答えて

1

を使用する必要がありますので、両方のための

ヘッダバイトが「78 9C」ですあなたのNode.jsはそれが本当に何をしたかどうかを確認するためにあなたのforループの後にバッファチェックしていなかったようですそれがそうだったと思った。オフセットはi*j-1ですか?たぶんあなたはi*100 + j - 101を意味するのでしょうか?あるいは、無駄な計算を避けるために、forループの前にk = 0を設定し、オフセットをk++にしてください。

関連する問題