检查文件是否通过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- isValidCompressed
的isValidCompressed
绑定 ,我们看到它将input数据视为一个node::Buffer
。 由于typeof data
给我们的string
,我们可能没有正确的数据types。
这里的解决scheme是将'utf8'
参数放到readFile
,这样就可以将数据作为原始缓冲区,而不是将其转换为string。