Android使用Okio解压deflate压缩文件的方法

本文介绍了在Android中如何使用Okio库来解压deflate压缩的文件。作者通过Bilibili弹幕API获取到压缩文件,发现OkHttp无法自动解压。通过研究,使用Okio的解压缩功能,解决了数据格式不匹配的问题,实现了正确解压并读取数据。
摘要由CSDN通过智能技术生成

问题描述:

最近自己写个Android软件玩玩,试着获取Bilibili的弹幕xml文件,使用OkHttp下载下来后发现是压缩文件需要解压,而且返回的response中的Content-Type = deflate,指该文件使用了deflate压缩算法而不是常见的gzipgzip压缩文件OkHttp支持自动解压),于是就要想办法解压获得原文件。

解决方案

先说下b站弹幕api。

b站每个视频都有av号作为标识,而对应的弹幕文件则是用cid(chatid)进行标识,两者之间没有换算关系。

要根据av号获得对应的cid,需要先获取视频网页,再利用正则表达式从网页源码中寻找cid。

代码如下:

public void getCID(int avNumber) {
    OkHttpClient client = new OkHttpClient();
    final Request request = new Request.Builder()
            .get()
            .url("https://www.bilibili.com/video/av" + String.valueOf(avNumber))
            .build();
    Call call = client.newCall(request);
    call.enqueue(new Callback() {
        @Override
        public void onFailure(Call call, IOException e) {

        }

        @Override
        public void onResponse(Call call, Response response) throws IOException {
            html = response.body().string();
            Pattern pattern = Pattern.compile("cid=(.*?)&aid=");
            Matcher matcher = pattern.matcher(html);
            if (matcher.find()) {
                cid = matcher.group(1);
            } else {
                cid =  " ";
            }
            Log.d(
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值