2020-05-26 20:37发布
断点续传实现:
简单来说应该分为两个角度来看待:
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:续传的字节位置
最多设置5个标签!
断点续传实现:
简单来说应该分为两个角度来看待:
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:续传的字节位置
一周热门 更多>