社区
Java SE
帖子详情
ftp实现多线程上传时,遇到问题,请高手指点。
张建飞(Frank)
2007-07-05 04:40:04
问题描述:
在客户端有一个大文件,要使用多线程将其上传到服务器端
主要有以下问题。
一、怎样将这个文件拆分,以便每个线程传递其一部分,当然在客户端将其拆分好,再上传肯定是可以的。我的意思是可不可以先获得文件的输入流FileInputStream(new File(文件名)),然后在流里面控制要传递哪部分data。
二、当这些被切割的文件传到服务器后,怎样在服务器端将其还原为原来的文件呢?
如果不能对服务器端编程,就不可能还原文件?
...全文
524
7
打赏
收藏
ftp实现多线程上传时,遇到问题,请高手指点。
问题描述: 在客户端有一个大文件,要使用多线程将其上传到服务器端 主要有以下问题。 一、怎样将这个文件拆分,以便每个线程传递其一部分,当然在客户端将其拆分好,再上传肯定是可以的。我的意思是可不可以先获得文件的输入流FileInputStream(new File(文件名)),然后在流里面控制要传递哪部分data。 二、当这些被切割的文件传到服务器后,怎样在服务器端将其还原为原来的文件呢? 如果不能对服务器端编程,就不可能还原文件?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
7 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
zjf405
2007-07-20
打赏
举报
回复
谁有做过这方面的给点思路,站内短消息我~
500求解!
zjf405
2007-07-20
打赏
举报
回复
帮顶,期待高人~
张建飞(Frank)
2007-07-11
打赏
举报
回复
在上传文件时,遇到新问题,当网络连接断开后,会触发一个connect reset exception异常。同时刚刚上传未成功的文件,也没有保存下来。这样就不能断点续传了,请问要怎么解决?
张建飞(Frank)
2007-07-06
打赏
举报
回复
to ssnec
思路的确是这样的,可是问题就在于怎样获得这个流的分割。我尝试了几种方案结果都不行。
一、用InputStream的skip(int len)方法过滤,因为只能跳转掉len长度后传输后面的字节,当有3个线程或更多时,肯定是不行的。
二、结合FileChannel的position()方法,去定位流中当前要传输的位置,然后通过read(buf,0,length)取得要传输的那段流,比如ssnec说的传输50k到100k的位置,就可以fileIS.position(50K);
byte[] buf=new buf[50K];
fileIS.read(buf,0,50K);
来完成。但是当文件很大的时候呢,假如文件是2G,那么每个线程负责传500M。
还是这样的,byte[] buf=new buf[50M]; GOD!!这么大的数组,JVM马上就out of memory了。
ok,既然这样不行那就把buf设小一点,然后做一个判断,如下
file.position(startPos);
byte[] buf = new byte[2048];
int len=2048;
while (in.read(buf,0,len)!= -1 && startPos < endPos){
ftp.put(buf, fileName,true);
startPos=startPos+len;
}
似乎是可以了,但是这样频繁的put()操作也同样有问题,你会发现BindException的错误。
原因是短时间内new socket操作很多,而socket.close( )操作并不能立即释放绑定的端口,导致系统资源耗尽。
所以最后还是决定放弃在流里面分割的想法,其实用多个线程传多个文件,和将一个大文件用多个线程传,效果也是一样的嘛。
ssnec
2007-07-06
打赏
举报
回复
我给个思路吧.
可以后台做个线程池,线程池里假设有4个线程,你把文件的长度统计一下(或者大致分配一下.)
每个线程从固定的点开始读文件(读固定长度.)
假设:文件有200个字节.
4个线程 分别从 0 50 100 150开始读,每个线程读50个字节,这样速度就能快很多.
等上传完后再合并文件.我只知道一个合并文件的方法:
COPY:[源盘][路径]〈源文件名1〉〈源文件名2〉…[目标盘][路径]〈目标文件名〉;
liujun999999
2007-07-06
打赏
举报
回复
多线程上传必须要有服务器端的,也就是说在你的服务器上必须要有个软件复杂组装
zjf405
2007-07-05
打赏
举报
回复
帮顶
Qt5(C++)高级篇之2:
FTP
网络编程实战
1.带领您深入学习QT5/C++:
FTP
基础理论、GET下载文件、PUT
上传
文件、
FTP
命令解析、
FTP
断点续传,逐步提升Qt编程水平。 2.所有章节均有理论知识介绍、接口讲解、实例代码讲解,讲解过程中不断穿插老师在开发过程中...
初步解决common-net.jar开发
ftp
时
上传
文件损坏
问题
刚开始接触用common-...偶然间发现,如果调用了
FTP
Client.logout(),就解决了
问题
,但是在单一线程中下载多个文件却没有成功,还
请
高手
指点
迷津。代码如下: package com.yct.test; import java.io.FileInput...
PHP 面试知识点整理归纳
全文已整理补充完毕,以后还会继续更新文章里面的错误,以及补充尚不完善的
问题
。 ... lz也是初学者,以下知识点均为自己整理且保持不断更新,也希望各路大神多多
指点
...由于内容比较多,没有直接目录,
请
自行对照 Gi...
HTML4
Qhtml
问题
,
高手
请
进,或者搞过html分析的
请
进 T我想写个程序,能够获取html叶面里的表单,然后再在程序里面显示出来,但现在的
问题
是有些表单里的数据(网页里预定义,存在array里面,有jsscript把它放到表单里面...
HTML(4):杂项
Qhtml
问题
,
高手
请
进,或者搞过html分析的
请
进 T我想写个程序,能够获取html叶面里的表单,然后再在程序里面显示出来,但现在的
问题
是有些表单里的数据(网页里预定义,存在array里面,有jsscript把它放到表单里面...
Java SE
62,614
社区成员
307,327
社区内容
发帖
与我相关
我的任务
Java SE
Java 2 Standard Edition
复制链接
扫一扫
分享
社区描述
Java 2 Standard Edition
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章