首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Android/Java:如何跟踪InputStream的进度

在Android/Java中,要跟踪InputStream的进度,可以通过以下步骤实现:

  1. 创建一个自定义的InputStream子类,例如ProgressInputStream,继承自InputStream类。
  2. 在ProgressInputStream类中,添加一个成员变量用于保存当前读取的字节数,例如progress。
  3. 重写ProgressInputStream类的read()方法,在方法中调用super.read()读取数据,并在读取完成后更新progress的值。
  4. 提供一个公共方法,例如getProgress(),用于获取当前读取的进度。
  5. 在使用InputStream的地方,替换为ProgressInputStream,并使用getProgress()方法获取进度。

下面是一个示例代码:

代码语言:txt
复制
import java.io.IOException;
import java.io.InputStream;

public class ProgressInputStream extends InputStream {
    private InputStream inputStream;
    private long progress;

    public ProgressInputStream(InputStream inputStream) {
        this.inputStream = inputStream;
        this.progress = 0;
    }

    @Override
    public int read() throws IOException {
        int data = inputStream.read();
        if (data != -1) {
            progress++;
        }
        return data;
    }

    @Override
    public int read(byte[] b) throws IOException {
        int bytesRead = inputStream.read(b);
        if (bytesRead != -1) {
            progress += bytesRead;
        }
        return bytesRead;
    }

    @Override
    public int read(byte[] b, int off, int len) throws IOException {
        int bytesRead = inputStream.read(b, off, len);
        if (bytesRead != -1) {
            progress += bytesRead;
        }
        return bytesRead;
    }

    public long getProgress() {
        return progress;
    }

    // 其他重写的InputStream方法...

    // 示例使用腾讯云对象存储 COS(Cloud Object Storage)作为相关产品
    // 腾讯云COS产品介绍链接:https://cloud.tencent.com/product/cos
}

使用示例:

代码语言:txt
复制
try {
    InputStream inputStream = new ProgressInputStream(new FileInputStream("file.txt"));
    byte[] buffer = new byte[1024];
    int bytesRead;
    while ((bytesRead = inputStream.read(buffer)) != -1) {
        // 处理读取的数据
        // 可以通过调用getProgress()方法获取当前读取的进度
    }
    inputStream.close();
} catch (IOException e) {
    e.printStackTrace();
}

这样,通过使用自定义的ProgressInputStream类,我们可以在读取InputStream的过程中实时跟踪进度。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

java inputstream读取文件_java如何获取输入数据

大家好,又见面了,我是你们朋友全栈君。 InputStream读取流有三个方法,分别为read(),read(byte[] b),read(byte[] b, int off, int len)。...(byte[] b)和InputStream.read(byte[] b,int off,int len)这两个方法都是用来从流里读取多个字节,有经验程序员就会发现,这两个方法经常 读取不到自己想要读取个数字节...仔细阅读JavaAPI说明就发现了,这个方法 并不保证能读取这么多个字节,它只能保证最多读取这么多个字节(最少1个)。...) { readCount += inStream.read(b, readCount, count - readCount); } 关于InputStreamavailable()方法 这个方法意思是返回此输入流下一个方法调用可以不受阻塞地从此输入流读取...首先编写两个类,一个用户初始化Socket服务,并且处理每个请求都有新线程去处理,代码如下: package com.service; import java.net.*; public class

2.5K20

Android条纹进度实现(调整view宽度仿进度条)

前言 本文主要给大家介绍了关于Android条纹进度条(调整view宽度仿进度条)相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细介绍吧 方法如下: 美工同学指定了一个进度条样式 ?...进度条样式 这斑斓进度条,如果要自己画实在是劳民伤财。于是请美工切了一张素材。 ? 素材样例 如果用shape或者.9图片不太好处理这个条纹。转变思路,放置2张图片。...一张作为背景(底,bottom),一张作为进度条图片(cover)。 进度改变时,改变上面图片宽度。 这就要求上面的图片是圆角。...回到我们要进度条。布局文件中放置好层叠图片。.../java/com/rust/aboutview/activity/RoundCornerActivity.java package com.rust.aboutview.activity; import

2.2K30

Android实现带节点进度

日常开发中经常会需要用到自定义View,这次刚好有个需求,需要用到带有节点进度条。东西很简单直接继承View就行了。 ?...*/ private int radius; /** * 文字和节点进度top */ private int marginTop; /** * 两个节点之间距离 */ private...,开始在onDraw中绘制节点进度条和绘制文字 1、绘制灰色背景线条 if(nodeList == null || nodeList.isEmpty()){ return; } bgPaint.setStrokeWidth...(radius/2); //绘制灰色背景线条 canvas.drawLine(radius,radius,getWidth()-radius,radius,bgPaint); 2、绘制节点上圆和两个节点之间间隔线条...currentTextWidth / 2, radius*2 + marginTop + mBounds.get(i).height()/2, unselectPaint); } } } 有时候可能需要是下面这种进度

1.4K20

SQL|如何查看VACUUM进度

('block_size')::int) AS table_size中heap_blks_total表示表中堆块总数,block_size为当前pg块大小,该参数是在initdb初始化时指定。...注意:如果不包含死元组(标记为需要删除行)块会被跳过,因此这个计数器可能有时会向前跳跃一个比较大增量。...scanned_pct: scanned进度(百分比)vacuumed_pct: vacuum进度(百分比)。...index_vacuum_count: 已完成索引清理周期数dead_pct: 死元组清理进度(百分比)(三)延伸 通过上述SQL,我们可以监控vacuum执行到哪里了,还差多少完成等等,做到心里有数...注意:vacuum full是不支持通过该视图查看到进行进度。后话: 如果有任何需要指正/指教/交流,可以后台评论,大家一起学习~

10510

Android 基于IntentService文件下载示例代码

但是,作为一个负责app,当然要给用户反馈,所以我们要显示一下进度。 我们用Notification来显示进度。...(需要注意是,如果有必要调用主UI线程来显示进度的话,要充分考虑到Service运行过程中,你app未必是一直活动着,可能早就destroy了。)....app.NotificationCompat; import android.util.Log; import java.io.File; import java.io.FileNotFoundException...; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.net.HttpURLConnection...== 200) { handler.post(run);//更新下载进度 byte[] buffer = new byte[1024*8];// 数据块,等下把读取到数据储存在这个数组,这个东西大小看需要定

89631

Android开发高级进阶——多线程(实现简单下载器)

四.如何使用多线程? ---- 我们经常说Android主线程是线程不安全,所以只能在主线程中更新UI。那么如何更新主线程且保证线程是安全呢?...:color="#000000" android:width="0.7dp"/> 接下来就是下载操作了,代码如下:MainActivity.java public class...Params:启动任务执行输入参数类型。 Progress:后台任务完成进度类型。 Result:后台执行任务完成后返回结果类型。...:后台线程将要完成任务。该方法可以调用publishProgress(Progress... values)方法更新任务执行进度。...(ProgressDialog.STYLE_HORIZONTAL); //设置对话框进度条是否显示进度 progressDialog.setIndeterminate(

86220

Android实用View:炫酷进度

www.jianshu.com/u/51d1fd73fb72 源码地址 https://github.com/lygttpod/AndroidCustomView/blob/master/app/src/main/java.../com/allen/androidcustomview/widget/HorizontalProgressBar.java 文章目录 写在前面 效果展示 源码分析 带动画进度条效果 绘制上边百分比布局...60%进度条.png ? 100%进度条.png ?...2.绘制上边百分比布局 ? 看到这个百分比提示框,你会想到如何实现呐,很多人会选择使用图片然后变更图片位置来达到效果,作为一个有追求程序猿怎能满足于此呐,自己绘制出来岂不更好。 ?...接下来我们来分析一下如何绘制这个带三角矩形. 这里说一下我们实现思路:其实第一次我是准备从起点到终点用过画闭合线做,需要计算七个点坐标,最终能实现,但是这种方法太笨了,根本拿不出手哦 ?

99160

java基础io流——OutputStream和InputStream故事(温故知新)

io流概述: IO流用来处理设备之间数据传输,上传文件和下载文件,Java对数据操作是通过流方式,Java用于操作流对象都在IO包中。...IO流常用基类 字节流抽象基类: InputStream ,OutputStream。 字符流抽象基类: Reader , Writer。...注: 由这四个类派生出来子类名称都是以其父类名作为子类名后缀。 如:InputStream子类FileInputStream。 如:Reader子类FileReader。...image 同样用完了流,也要及时关闭,以防占用内存。 inputStream.close(); 完整示例: 建议以字节数组方式读取数据。...字节流一次读写一个数组速度明显比一次读写一个字节速度快很多,这是加入了数组这样缓冲区效果。 java本身在设计时候,也考虑到了这样设计思想(装饰设计模式后面讲解),所以提供了字节缓冲区流。

85220
领券