检查文件是否通过 Snappy 压缩
Check if File is Compressed via Snappy
我正在尝试测试是否通过 Snappy 压缩了文本。我正在使用 Node.JS https://github.com/kesla/node-snappy 库。
感谢此 answer 以获取有关读取文件的帮助。
$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...
部分发生了什么?
这里的问题是 isValidCompressed
需要一个缓冲区,而不是一个字符串。
根据失败的断言,我们可以看到我们正在“外部”数组数据中寻找奇怪的属性,这意味着某处的某些东西期待比 JavaScript 字符串更原始的东西。如果我们查看 node-snappy 的 isValidCompressed
bindings,我们会看到它将其输入数据视为 node::Buffer
。由于 typeof data
给我们 string
,我们可能没有正确的数据类型。
此处的解决方案是将 'utf8'
参数删除到 readFile
,这将数据作为原始缓冲区提供给我们,而不是尝试将其转换为字符串。
我正在尝试测试是否通过 Snappy 压缩了文本。我正在使用 Node.JS https://github.com/kesla/node-snappy 库。
感谢此 answer 以获取有关读取文件的帮助。
$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...
部分发生了什么?
这里的问题是 isValidCompressed
需要一个缓冲区,而不是一个字符串。
根据失败的断言,我们可以看到我们正在“外部”数组数据中寻找奇怪的属性,这意味着某处的某些东西期待比 JavaScript 字符串更原始的东西。如果我们查看 node-snappy 的 isValidCompressed
bindings,我们会看到它将其输入数据视为 node::Buffer
。由于 typeof data
给我们 string
,我们可能没有正确的数据类型。
此处的解决方案是将 'utf8'
参数删除到 readFile
,这将数据作为原始缓冲区提供给我们,而不是尝试将其转换为字符串。