fuzhengwei / blog.github.io

fuzhengwei.github.io
Apache License 2.0
15 stars 8 forks source link

netty案例,netty4.1中级拓展篇四《Netty传输文件、分片发送、断点续传》 - bugstack虫洞栈 #74

Open fuzhengwei opened 5 years ago

fuzhengwei commented 5 years ago

https://fuzhengwei.github.io/itstack-demo-netty-2/2019/08/19/netty%E6%A1%88%E4%BE%8B-netty4.1%E4%B8%AD%E7%BA%A7%E6%8B%93%E5%B1%95%E7%AF%87%E5%9B%9B-Netty%E4%BC%A0%E8%BE%93%E6%96%87%E4%BB%B6-%E5%88%86%E7%89%87%E5%8F%91%E9%80%81-%E6%96%AD%E7%82%B9%E7%BB%AD%E4%BC%A0.html

前言介绍

1、在实际应用中我们经常使用到网盘服务,他们可以高效的上传下载较大文件。那么这些高性能文件传输服务,都需要实现的分片发送、断点续传功能。 2、在Java文件操作中有RandomAccessFile类,他可以支持文件的定位读取和写入,这样就满足了我们对文件分片的最基础需求。 3、Netty服务端启动后,可以向客户端发送文件传输指令;允许接收文件、控制读取位点、记录传输标记、文件接收完成。 4、为了保证传输性能我们采用protostuff二进制流进行传输。 5、读取文件的时候需要注意,我们设定byte[1024]为默认读取范围,但当读取到最后的时候可能不足1024个字节,就会出现空字节。这个时候需要去掉空字节,否则我们的文件写入会多额外信息,导致文件不能打开{zip、war、exe、jar等}。

fuzhengwei commented 4 years ago

最近小伙伴上传文件的时候发现,在有大图片的时候会出现传输文件不完整。测试发现目前是1024字节读取,文件类图片不能分片读。因此可以修改一次读取大小,目前案例源码修改为1024*100,另外可以优化为按照不同文件类型去选择读取和写入方式。