什么是br编码
Google 认为互联网用户的时间是宝贵的,他们的时间不应该消耗在漫长的网页加载中,因此在 2015 年 9 月 Google 推出了无损压缩算法 Brotli。Brotli 通过变种的 LZ77 算法、Huffman 编码以及二阶文本建模等方式进行数据压缩,与其他压缩算法相比,它有着更高的压塑压缩效率。启用 Brotli 压缩算法,对比 Gzip 压缩 CDN 流量再减少 20%。
根据 Google 发布的研究报告,Brotli 压缩算法具有多个特点,最典型的是以下 3 个:
针对常见的 Web 资源内容,Brotli 的性能相比 Gzip 提高了 17-25%;
当 Brotli 压缩级别为 1 时,压缩率比 Gzip 压缩等级为 9(最高)时还要高;
在处理不同 HTML 文档时,Brotli 依然能够提供非常高的压缩率。
Brotli 凭借它优异的压缩性能迅速占领了市场,从下图可以看到,除了 IE 和 Opera Mini 之外,几乎所有的主流浏览器都已支持 Brotli 算法。
痛点
用httpclient调用接口,返回值是被br压缩的,用 EntityUtils.toString(entity, Consts.UTF_8)处理也不可以。
这样就拿不到自己想要的东西
解决
import org.brotli.dec.BrotliInputStream;
BufferedReader bufferedReader=null;
if(response.getLastHeader("content-encoding").getValue().equals("br")) { // check if getting brotli compressed stream
rd = new BufferedReader(new InputStreamReader(new BrotliInputStream(response.getEntity().getContent())));
}
else {
rd = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
}
StringBuilder result = new StringBuilder();
String str = null;
while((str = bufferedReader.readLine()) != null){
System.out.println(str);
result.append(str);
}
Brotli压缩在国外用的比较多,这些年陆续国内网站也跟上了
例如b站