千家信息网

如何使用brotli压缩文件和解压缩

发表于:2024-11-18 作者:千家信息网编辑
千家信息网最后更新 2024年11月18日,这篇文章主要为大家详细介绍了使用brotli压缩文件和解压缩的方法,文章还展示了示例代码,适合刚入门的初学者,感兴趣的小伙伴们可以参考一下。制作压缩文件下面我先介绍一下如何制作压缩文件。下面的代码和用
千家信息网最后更新 2024年11月18日如何使用brotli压缩文件和解压缩

这篇文章主要为大家详细介绍了使用brotli压缩文件和解压缩的方法,文章还展示了示例代码,适合刚入门的初学者,感兴趣的小伙伴们可以参考一下。

制作压缩文件

下面我先介绍一下如何制作压缩文件。下面的代码和用例都来自于项目 packed-selenium-java-example 。

安装 brotli 命令

Mac 用户

brew install brotli

Windows 用户可以去这个界面下载,https://github.com/google/brotli/releases

打包并压缩

打包前两个文件大小分别为 7.5M 和 97M

╭─ ~/D/test1[◷ 18:15:21]╰─  lltotal 213840-rwxr-xr-x  1 vangie  staff   7.5M  3  5 11:13 chromedriver-rwxr-xr-x  1 vangie  staff    97M  1 25  2018 headless-chromium

使用 GZip 打包并压缩,大小为 44 M。

╭─ ~/D/test1[◷ 18:15:33]╰─  tar -czvf chromedriver.tar chromedriver headless-chromiuma chromedrivera headless-chromium╭─ ~/D/test1[◷ 18:16:41]╰─  lltotal 306216-rwxr-xr-x  1 vangie  staff   7.5M  3  5 11:13 chromedriver-rw-r--r--  1 vangie  staff    44M  3  6 18:16 chromedriver.tar-rwxr-xr-x  1 vangie  staff    97M  1 25  2018 headless-chromium

tar 去掉 z 选项再打包一遍,大小为 104M

╭─ ~/D/test1[◷ 18:16:42]╰─  tar -cvf chromedriver.tar chromedriver headless-chromiuma chromedrivera headless-chromium╭─ ~/D/test1[◷ 18:17:06]╰─  lltotal 443232-rwxr-xr-x  1 vangie  staff   7.5M  3  5 11:13 chromedriver-rw-r--r--  1 vangie  staff   104M  3  6 18:17 chromedriver.tar-rwxr-xr-x  1 vangie  staff    97M  1 25  2018 headless-chromium

压缩后的大小为 33M,相比 Gzip 的 44M 小了不少。耗时也非常的感人 6 分 18 秒,Gzip 只要 5 秒。

╭─ ~/D/test1[◷ 18:17:08]╰─  time brotli -q 11 -j -f chromedriver.tarbrotli -q 11 -j -f chromedriver.tar  375.39s user 1.66s system 99% cpu 6:18.21 total╭─ ~/D/test1[◷ 18:24:23]╰─  lltotal 281552-rwxr-xr-x  1 vangie  staff   7.5M  3  5 11:13 chromedriver-rw-r--r--  1 vangie  staff    33M  3  6 18:17 chromedriver.tar.br-rwxr-xr-x  1 vangie  staff    97M  1 25  2018 headless-chromium

运行时解压缩

下面以 java maven 项目为例

添加解压依赖包

    org.apache.commons    commons-compress    1.18    org.brotli    dec    0.1.2

commons-compress 是 apache 提供的解压缩工具包,对于各种压缩算法提供一致的抽象接口,其中对于 brotli 算法只支持解压,这里足够了。org.brotli:dec 包是 Google 提供的 brotli 解压算法的底层实现。

实现 initialize 方法

public class ChromeDemo implements  FunctionInitializer {    public void initialize(Context context) throws IOException {        Instant start = Instant.now();        try (TarArchiveInputStream in =                     new TarArchiveInputStream(                             new BrotliCompressorInputStream(                                     new BufferedInputStream(                                             new FileInputStream("chromedriver.tar.br"))))) {            TarArchiveEntry entry;            while ((entry = in.getNextTarEntry()) != null) {                if (entry.isDirectory()) {                    continue;                }                File file = new File("/tmp/bin", entry.getName());                File parent = file.getParentFile();                if (!parent.exists()) {                    parent.mkdirs();                }                System.out.println("extract file to " + file.getAbsolutePath());                try (FileOutputStream out = new FileOutputStream(file)) {                    IOUtils.copy(in, out);                }                Files.setPosixFilePermissions(file.getCanonicalFile().toPath(),                        getPosixFilePermission(entry.getMode()));            }        }        Instant finish = Instant.now();        long timeElapsed = Duration.between(start, finish).toMillis();        System.out.println("Extract binary elapsed: " + timeElapsed + "ms");    }}

实现 FunctionInitializer 接口的 initialize 方法。解压过程刚开始是四层嵌套流,作用分别如下:

  1. FileInputStream 读取文件
  2. BufferedInputStream 提供缓存,介绍系统调用带来的上下文切换,提示读取的速度
  3. BrotliCompressorInputStream 对字节流进行解码
  4. TarArchiveInputStream 把 tar 包里的文件逐个解出来

然后 Files.setPosixFilePermissions 的作用是还原 tar 包中文件的权限。代码太长此处略去,参阅 packed-selenium-java-example

Instant start = Instant.now();...Instant finish = Instant.now();long timeElapsed = Duration.between(start, finish).toMillis();System.out.println("Extract binary elapsed: " + timeElapsed + "ms");

上面的代码段会打印出解压的耗时,真实执行大概在 3.7 s 左右。

最后不要忘记在 template.yml 里配置上 Initializer

InitializationTimeout

猜你想要:

1.智能压缩使用 Gzip 还是 Brotli

2.Nginx启用Brotli算法压缩示例

以上就是brotli压缩文件和解压缩的使用方法,详细使用情况还得要大家自己使用过才能知道具体要领。如果想阅读更多相关内容的文章,欢迎关注行业资讯频道!

文件 代码 大小 方法 算法 和解 作用 接口 文章 用户 示例 面的 项目 制作 感人 一致 上下 上下文 两个 使用方法 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 检测网络安全的应用 儿童网络安全锁 松江区品牌软件开发定制介绍 网络安全与执法视频侦查方向 当今计算机网络安全的不足 大智慧如何删除下载数据库 网络安全制度建设流程 链信云保网络技术有限公司 四川鲸鱼互联网科技有限公司 浙江虚拟服务器管理软件 厦门壹碟互联网科技有限公司 互联网科技企业融资 钛马信息网络技术看准 文档软件开发价格合理 湖南扬途网络技术有限公司干嘛的 db2数据库字段扩容语句 义乌app软件开发流程八个步骤 常用数据库管理系统 香港服务器合租 网购数据库 服务器虚拟化知识点总结 华为服务器进系统界面黑屏 普通主板怎么用服务器内存条 系统性网络安全的应用 我国颁布的网络安全法律 易语言数据库增加新字段 服务器内存条插上去不识别 手机远程代理服务器 上海数据库职友集合 钱在银行数据库只是一个数字吗
0