同样大小的文件不同压缩后会不会大小不一样?那再把解压的他们还原后有没有可能原来的文件就不同大小了

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了同样大小的文件不同压缩后会不会大小不一样?那再把解压的他们还原后有没有可能原来的文件就不同大小了相关的知识,希望对你有一定的参考价值。

只要是同样文件,解压后当然是一样的。
至于同样文件大小压缩后会产生大小不一样是可能的,这里有几点。不同的压缩软件压缩,虽然他们都支持rar压缩包,但不同软件他们会利用不同的算法,这里会造成压缩大小不同。

其次,即便是同一压缩软件,才用不同的压缩密度压缩也会造成文件大小不一致,就拿常规的rar软件,里面有几个选项,存储,一般,和较好 等三种压缩方式,其中较好压缩比例最大,但花费时间也根多。

再者,同样文件,在使用加密压缩和常规压缩,即便是压缩比例一致也会造成实际压缩大小不同,加密压缩会略微大于不采用加密压缩文件。

如果你不相信的话,你可以试验一下,你下载一个hash 中文叫 哈希值 检测工具。这个工具就是检测文件是否相同,具体你可以百度一下。 如果检测出代码相同则表明这两个文件相同,如果不同那就表明文件为不同。即便是文件命名不同,如果只是通过改名方式,那哈希值也会相同。
参考技术A 压缩还会根据文件数量,而影响压缩的大小的,不过不用担心,解压后文件是完全没有变化的,依然能使用,除非源文件已经损坏追问

不是 别人和我同样的文件压缩后咋不一样大……

然后别人还原后和我也不是一样大啊 关键内容都是一样的……

追答

这些对文件没有影响的,不用担心,你内容不是都一样吗,压缩只为了方便存放和发送

zlib gunzip解压缩每个在同一文件上运行的不同缓冲区大小

我正在从电影数据库下载每日导出gzip文件并使用zlib解压缩它。当命中end事件时,我记录我解压缩的数据字符串的长度。每次长度都不同。

似乎数据没有完全解压缩。当我开始解析文件实际包含的JSON时,我注意到了这一点。它会在转换JSON的每一行(每行代表一个独立的json对象)中途中途,并因为json格式错误而爆炸。

var http = require('http');
var zlib = require('zlib');

var downloadUrl = "http://files.tmdb.org/p/exports/movie_ids_03_01_2018.json.gz";
http.get(downloadUrl, function(response) {
    var fileContents = "";
    var gunzip = zlib.createGunzip();

    gunzip.on('data', function(data) {
        fileContents += data.toString();
    });

    gunzip.on('end', function() {
        console.log(fileContents.length);
    });

    response.pipe(gunzip);
});

我错误地使用了gunzip事件吗?

我有一个reproducible example你可以执行看它运行。

答案

我通过用http替换我对request的使用来解决这个问题。我不确定我在http.get做错了什么,但把gunzip换成request返回值解决了我的问题。

var request = require('request');
var zlib = require('zlib');
var fs = require('fs');

var downloadUrl = "http://files.tmdb.org/p/exports/movie_ids_03_01_2018.json.gz";
var response = request(downloadUrl);
var fileContents = "";
var gunzip = zlib.createGunzip();

gunzip.on('data', function(data) {
    fileContents += data.toString();
});

gunzip.on('end', function() {
    var json = fileContents.split('\n').filter(function(value, index) {
        if (value == "") {
            console.log(index + " is empty and skipped.");
            return false;
        }

        return true;
    });
});

response.pipe(gunzip);

我试图使用request.get(options, function(error, response, body){});但无法将gunzip送入响应或身体。我是流媒体的新手,需要更多地研究以找出问题所在。同时,上面的解决方案没有问题。

由于每天运行一次,作为Azure功能,这样同步运行它并不是什么大问题。我没有阻止任何进一步的工作。

以上是关于同样大小的文件不同压缩后会不会大小不一样?那再把解压的他们还原后有没有可能原来的文件就不同大小了的主要内容,如果未能解决你的问题,请参考以下文章

为啥文件压缩后和原文件大小不一样

微软雅黑字体大小不一?

文件夹大小基本差不多,可为啥压缩出来的文件包却相差那么大?

为啥同样的文件我压缩后和原来的文件大小差不多?

请问 怎样分别查看windows系统与Linux系统的栈空间大小?

android程序中字体大小的单位是啥?