kld-huffman-coding
Version:
Compress and decompress an array of bytes using Huffman coding
51 lines (38 loc) • 1.4 kB
JavaScript
var BitWriterMSB = require('kld-bit-streams').BitWriterMSB,
BitReaderMSB = require('kld-bit-streams').BitReaderMSB,
Huffman = require('../lib/Huffman');
function createData() {
var size = 64; //16384;
var data = new Array(size);
for ( var i = 0; i < size; i++ ) {
var s = Math.sin( Math.random() * Math.PI );
data[i] = Math.floor(s*128 + 64);
}
return data;
}
exports.compress = function(beforeExit, assert) {
var writer = new BitWriterMSB();
var huffman = new Huffman();
var data = createData();
huffman.compress(data, writer);
writer.close();
//console.log(writer.data);
var before = data.length;
var after = writer.data.length;
var reduction = Math.round( after/before * 10000 ) / 100;
var rating = Math.round( (1 - after/before) * 10000 ) / 100;
console.log("Original data length: " + before);
console.log("Compressed length: " + after);
console.log("Percent original size: " + reduction + "%");
console.log("Percent compression: " + rating + "%");
};
exports.decompress = function(beforeExit, assert) {
var writer = new BitWriterMSB();
var huffman = new Huffman();
var data = createData();
huffman.compress(data, writer);
writer.close();
var reader = new BitReaderMSB(writer.data);
var data2 = huffman.decompress(reader);
assert.eql(data2, data);
};