【多文件自平衡云传输 二】---底层基础准备

接发消息的准备

底层如果不能发送那么所有的一切都是无用的,底层进行发送时,需要指代这次的发送个接收信息才对,也就是我们在应用层规定的协议。我们首先需要发送的是这次发送的资源的信息,比如:是哪一个文件的哪一段信息有多长,这样才能定向的写入我们该有的文件。

每一次发送都应该保持这样的协议,不然接收会变得混乱。
我们都知道我们在发送都会变成字节,但是我们设置的文件名和偏移量以及传的长度,都并非以字节来计算的。所以这里我们需要进行转换。并且都在得到字节流后可以进行转换回来。
在这里插入图片描述
在这里插入图片描述
有了底层字节的转换那么传输就很简单了。
但是值得注意的是因为我们在传输层和网络层是tcp和ip协议,那么在ip协议中,总长度是占16位字节,那么就最多占有2*16bytes - 20bytes的数据,这就是ip数据报最多的字节数63.98kb,那么为了防止ip数据报的拆分与组装,设置每次传输信息大小为1<<15bytes即32kb。虽然在数据链路层会变成一帧一帧传输但是因为每次传输路径的可能不一致,那么路径最小传输MTU才是关键,所以这里不进行帧的管理。

读写文件

对于读写文件,这里也需要进行讲解。因为读文件和写文件是两种操作,可以通过RandomAccessFile进行文件的读和写。这里有两种写法1.提供文件的绝对路径,那么每次都通过路径来new RandomAccessFile 用完后就关闭这个对象,多个对象一起操作文件。2.建立一个RandomAccessFile Pool来存储所有的RandomAccessFile,一个文件对应一个raf。这种方法因为多线程可能要操控同一个文件指针,所以必须加锁。经过测试,居然还是第二种的更快,原以为加锁后第二个会更慢,但是确实是更快了。
在这里插入图片描述
对于读当然都是不需要加锁的。
在这里插入图片描述
对于写因为第二种方式是操作同一个文件指针,那么就需要加锁。

资源准备

对于资源的准备,这里说的还是资源拥有者的资源准备,首先是要扫描本地资源,然后通过本地资源来填充需要发送给接收方的资源信息,资源发送方通过信息的分片再发送给资源拥有者。通过资源拥有者发送资源,接收方接收资源。达到资源的分享。这里首先是将资源发送方的资源准备好。在最后会做资源文件信息的发送,这里先不做。

所以这里需要建立一个资源类,来保证可以传输,其次这里应该设计一个用于资源接收者的本地扫描,这样就可以做到断点续传了,保证不二次发送已经发送了的文件。

在这里插入图片描述
资源类的id是保证资源的独一无二,可以通过资源名取hashCode。
对于absoluteRoot这是必须要的,每个人安装的磁盘都是不一样的,
但是资源的内的文件相对路径是不变的。对于filePool这是为了在接收时除去接收好的文件,以及在资源接收者接收资源信息时知道资源的文件路径。
在这里插入图片描述
资源接收者如果不是第一次接收文件,那么这里的资源对比就可以成为不重复接收的依据。
这里还应该提供组织资源的方法,这样就可以让接收者可以整理资源了。

在这里插入图片描述

资源的分割

在资源的传输时我们已经讨论了因为底层是tcp/ip协议,那么由于ip协议最大的传输长度是16位单位字节,也就是65535字节但是以内ip协议的报文头固定占用20字节,那么数据长度就不如64kb,所以我们在设置分片时,每一片就是1<<15位字节

这里进行分片,分片好后返回一个list<list>这样就可以派发给发送者任务,发送者就可以开始发送了。
在这里插入图片描述
在这里插入图片描述

因为我们的设计存在于一个未接收池,接收一片文件在写在对应的文件后,在这个未接收池中会进行删除,所以在一次接收完后,如果发现未接受池中海油文件片段应该进行二次发送和接收。所以就有了下面的方法
在这里插入图片描述

这里完成对资源类的介绍和准备,后面就直接进行注册中心的编写和接收者(其中包括上面提到的未接收池)以及发送者的编写。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值