首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >perl gunzip到buffer和gunzip to file有不同的字节顺序。

perl gunzip到buffer和gunzip to file有不同的字节顺序。
EN

Stack Overflow用户
提问于 2016-08-12 07:39:46
回答 1查看 280关注 0票数 1

我使用的是Perl v5.22.1、Storable 2.53_01和IO::Uncompress::Gunzip 2.068。

我想使用Perl对内存中的Storable文件进行压缩,而不使用中间文件。

我有一个变量$zip_file = '/some/storable.gz',它指向这个压缩文件。

如果我直接将其压缩到一个文件中,这很好,%root被正确地设置为Storable哈希。

代码语言:javascript
复制
gunzip($zip_file, '/home/myusername/Programming/unzipped');
my %root = %{retrieve('/home/myusername/Programming/unzipped')};

然而,如果我像这样进入记忆:

代码语言:javascript
复制
my $file;
gunzip($zip_file, \$file);
my %root = %{thaw($file)};

我知道错误了

比我最近的可存储二值图像v56.115 (v2.10)

所以这个可存储的神奇数字被屠杀了:它不应该有那么高。

但是,解压缩缓冲区中的字符串仍然正确;缓冲区以pst开头,这是正确的Storable头。它似乎只是多字节变量,如整数,正在被打破。

这是否与字节排序有关,比如写入文件是一种方式,而写入文件缓冲区则是在另一种方式下工作?我如何才能在不破坏整数的情况下将其压缩到缓冲区呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-08-12 08:02:16

这与解压缩无关,而是与使用retrievethaw有关。它们都期望不同的输入,即thaw期望来自freeze的输出,而retrieve期望来自store的输出。这可以通过一个简单的测试来验证:

代码语言:javascript
复制
$ perl -MStorable -e 'my $x = {}; store($x,q[file.store])'
$ perl -MStorable=freeze -e 'my $x = {}; print freeze($x)' > file.freeze

在我的机器上,store创建的文件为24个字节,freeze为20个字节。如果我从file.store中删除了前面的4个字节,那么该文件就相当于file.freeze,即存储只添加了一个4字节的头。因此,您可以尝试解压缩内存中的文件,删除前面的4个字节,并在其余部分上运行thaw

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

https://stackoverflow.com/questions/38912501

复制
相关文章

相似问题

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