检查文件是否通过Snappy压缩

我试图testing文本是否通过Snappy压缩。 我正在使用Node.JS https://github.com/kesla/node-snappy库。

信贷到这个答案从文件中读取的帮助。

$cat Decompress.js var snappy = require('snappy'); var fs = require('fs'); var filename = './snappy_compressed_docs/snappy_compressed_file' fs.readFile(filename, 'utf8', function(err, data) { if (err) throw err; console.log("done printing data. 'typeof data':", typeof data); console.log("snappy: ", snappy); snappy.isValidCompressed(data, function(e, result) { if(e) { console.log("error!", e); throw e; } console.log("snappy.isValidCompressed:", result); }); }); 

这是我得到的:

 $node Decompress.js done printing data. 'typeof data': string snappy: { compress: [Function], isValidCompressed: [Function: isValidCompressed], uncompress: [Function] } Assertion failed: (obj->HasIndexedPropertiesInExternalArrayData()), function Length, file ../src/node_buffer.cc, line 115. Abort trap: 6 

Assertion failed...什么事情Assertion failed...了?

这里的问题是, isValidCompressed需要一个缓冲区,而不是一个string。

基于失败的断言,我们可以看到我们在“外部”数组数据中寻找奇怪的属性,这意味着某处某处比JavaScriptstring更为原始。 如果我们看看node- isValidCompressedisValidCompressed绑定 ,我们看到它将input数据视为一个node::Buffer 。 由于typeof data给我们的string ,我们可能没有正确的数据types。

这里的解决scheme是将'utf8'参数放到readFile ,这样就可以将数据作为原始缓冲区,而不是将其转换为string。