如何实现断点续传?

2020-05-26 20:37发布


3条回答
上来打杂的
2021-11-30 09:48

断点续传实现:

简单来说应该分为两个角度来看待:


1、将要续传的文件


2、续传的文件


一、将要续传的文件


先说说将要续传的文件,既然是续传,那么肯定要有个标识,举例说明一下:


    事先准备一个文件,大小是1852字节,第一次读取该文件的io流(0-1024字节),并将1024作为下次读取的首值,存储1024这个变量,就是在这个过程中的标识(记录所读到的位置) ,通过这个标识,我们下次读取的字节范围应该就是(1024-1852)字节。


   要完成这个需求,应该考虑二个角度,


   1)、这个标识放在那里,(我之后举得列子是放在持久化map[ConcurrentHashMap])


   2)、既然是续传,那么肯定需要一个结束的状态的标识,来告诉续传的文件,我已经执行完了。


   下面是关键代码:


    (1),ConcurrentHashMap


     ConcurrentHashMap的优点:


    ConcurrentHashMap允许一边更新、一边遍历,也就是说在Iterator对象遍历的时候,


    ConcurrentHashMap也可以进行remove,put操作,且遍历的数据会随着remove,put操作产出变化,也就是说在Iterator对象遍历的时候,ConcurrentHashMap也可以进行remove,put操作,且遍历的数据会随着remove,put操作产出变化。


    简单来说:它只对put,remove操作使用了同步操作,get操作并不影响

(2)、读取文件部分核心代码:

path :路径,

fileName:文件名。

、续传的文件

续传的文件就好说了,只要给一个续传的标识位置,和对应的字节流就可以了,代码如下:

filePath:生成的文件,用来续传用

content:将要写入的字节

position:续传的字节位置


一周热门 更多>