多文件自平衡云传输:核心部分:文件存储

作为多文件传输系统,文件的存储管理功能必然是少不了的,多文件表示要将某个工程下的多个文件整体传输,那么第一步需要一个类去表示该工程(或app等等):
即ResourceInfo:

public class ResourceInfo {
	/**
	 * 编号前缀可以是APP名称、资源类型名称等等<br>
	 * 编号前缀也可以模仿URL的层次格式,说明更详细的信息,
	 * 同时避免命名冲突。<br>
	 */
	private String resourceHead;
	/**
	 * 资源编号<br>
	 * 编号是由APP自行产生的,比如:视频文件编号等。
	 */
	private String id;
	/**
	 * 资源简介
	 */
	private String introduce;

那么对应工程下的每一个文件就有其各自对应的路径、大小,名称等等属性,即ResourceFileInfo:

public class ResourceFileInfo {
	/**
	 * 从0开始的连续文件编号
	 */
	private int fileNo;
	/**
	 * 文件名称,含路径,但是,路径不含绝对根。<br>
	 * 路径是相对于绝对根的相对路径。
	 */
	private String fileName;
	/**
	 * 文件长度。
	 */
	private long fileSize;

注意此处存的是相对于绝对根的相对路径,因为文件除了自身的结构是固定的,它存在位置不同,绝对路径也不同,此处只保存他自身相对于所处工程的路径,绝对根将在用于接、发时获取。

上述是用于存储工程、文件本身属性的类。
接下来引入文件分块的理论,因为传输使用TCP/IP协议,IP协议限制了IP报文最大长度为64k,这意味着若单次发送长度大于64k,IP协议会将其自动拆分发送,再在接收端重组,为了避免这样频繁的拆分、组装影响速率,需要将大文件去拆分为多个小于64k的小文件,本次采用32k缓冲区的方法。
既然将大文件拆分开来,那么每一段文件也都应该有其自身的属性,如:该片段属于哪个文件,属于该文件的哪个部分,大小多少,即FileSectionInfo:

public class FileSectionInfo {
	public static final int FILE_SECTION_INFO_LEN = 20;
	
	private int fileNo;
	private long offset;
	private long length;

默认长度为20,因为该类三个成员int,long,long组成,长度相加为4+8+8=20。
三个成员依次代表属于哪个文件,该片段在文件当中的偏移量,文件片段长度。

有了该文件分段后每段文件的属性,自然也该有该文件自身用于存储片段的东西,即ResourceFileSectionInfo:

public class ResourceFileSectionInfo {
	private String resourceId;
	private List<FileSectionInfo> fileSectionList;
	private int index;

三个成员分别表示:该文件所属的工程id,该文件的所有文件片段集合,第三个成员用于方便去遍历该文件片段集合而产生的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

魔幻音

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值