首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >检查文件是否通过Snappy压缩

检查文件是否通过Snappy压缩
EN

Stack Overflow用户
提问于 2015-02-18 20:53:42
回答 1查看 1.6K关注 0票数 1

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

有关从文件中读取信息的帮助,请登录此answer

代码语言:javascript
复制
$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);
    });
});

我得到的是:

代码语言:javascript
复制
$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...部分是怎么回事?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-02-18 21:42:55

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

基于失败的断言,我们可以看到,我们在“外部”数组数据中寻找奇怪的属性,这意味着某个地方需要比JavaScript字符串更原始的属性。如果我们看一下node的 bindings,我们就会看到它把它的输入数据作为一个node::Buffer来处理。因为typeof data给了我们string,所以我们可能没有正确的数据类型。

这里的解决方案是将'utf8'参数删除到readFile,它将数据作为原始缓冲区提供给我们,而不是试图将其转换为字符串。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28593713

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档