文件io性能问题,欢迎大家讨论一下

ralihm 2003-06-12 08:40:22
在写一个上传下载程序的时候遇到以下的问题:

程序由客户端和服务器端构成,程序本身运行没有问题,文件也能正常传输
但实际在本机上运行发现:
程序传输10M以内的程序很快,不到40秒就可以完成。
但如果数据大于10M,前面的数据传输很快,10M以后的数据传输很慢,数据约大就越慢。
我测试的数据是50M,竟然要传送将近10分钟(这还是服务器和客户端都在本机上运行)如果用到互联网上,传输速度肯定会更慢了。

不知道大家是怎样解决这种问题的?


客户端从文件中读取数据,再通过socket发送到服务器上
FileInputStream infile = new FileInputStream(file);
OutputStream outtoFile=socketfile.getOutputStream();
byte[] b=new byte[255];
int bytesread=255;
while((bytesread=infile.read(b,0,bytesread))!=-1)
{
outtoFile.write(b,0,bytesread);
}
outtoFile.flush();

服务器端从socket中读取数据,然后存到文件中:
System.out.println("服务器端口为:"+server.getLocalPort());
Socket s=server.accept();
s.setSoTimeout(2000);
InputStream infile=s.getInputStream();
FileOutputStream outtoFile;
outtoFile=new FileOutputStream(outFile);
byte[] b=new byte[1023];
int bytesread=1023;

while((bytesread=infile.read(b,0,bytesread))!=-1)
{
//System.out.print(bytesread+" ");
outtoFile.write(b,0,bytesread);
}
...全文
48 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
ralihm 2003-06-12
  • 打赏
  • 举报
回复
看来大家都遇到差不多的问题啊???

baliok(奔奔) :我想知道你是客户端是java读写程序还是服务器端是servet程序???

Eraserpro 2003-06-12
  • 打赏
  • 举报
回复
我没试过传这么大的文件,不过把50MB分成几块到服务器那边再合起来应该会快点吧.有没有人试过?
zzhangwa 2003-06-12
  • 打赏
  • 举报
回复
学习,up
baliok 2003-06-12
  • 打赏
  • 举报
回复
好想确实有这种问题,我也试过再局域网上作文件上传,上传速度大概和FTP上传差不多,而且文件如果大于10M确认慢的让人受不了,有些奇怪。我怀疑这种文件传输就这样,应该和操作系统底层有关。
注:我不是用socket做的,是通过request实现的。
前导课程:      《Java工程师系列课程》前4部 课程内容:           本课程是《Java工程师系列课程》的第8部分,深入讲解Java文件IO流的相关知识。以下是本课程的内容展示:课程共69个小节,分为三个大部分:分别是文件部分、流部分和实战项目部分。文件部分,就是左上角用红框框起来的这一部分,主要讲解对文件以及文件夹的操作,第二部分就是课程最重要的部分,也是占课程比例最大的流部分,所谓流就是用来读写数据的类。本课程用45小节的时间为学员详细讲解各种流的使用方法以及注意事项。第三部分是实战项目部分,就是右下角用蓝色方框框起来的部分,在这一部分中,将为大家讲解如何用swing技术配合课程中学习的IO流去完成一个记事本项目。实际上,除了课程最后的这记事本项目,课程中还穿插了一些规模比较小的实战项目,比如分割文件、合并文件、给文件加密这样的小项目,以及压缩和解压文件项目。课程特点:1、讲解详细:不仅仅详细讲解了文件和流的各种用法,还讲解了很多使用过程中需要注意的细节。2、干货足量:每一个小节的时长基本都超过了20分钟,能让学员学到很多知识。3、深入解决实际问题:视频课程不仅讲解理论知识,还深入解决了很多实际问题,例如:讲解如何通过程序判断一个文件的编码格式、如何设置文件读写权限等4、讲解经典算法:例如讲解缓冲区的管理机制,能让学员学到前辈们的精华思想5、理论结合实践:课程在文件压缩和解压、文件分割以及合并、文件加密,这些小节都配有对应的实战项目,最后还有一个规模比较大的记事本项目6、手写代码:全程手写代码完成项目预期效果:      认真学习完本课程,学员可以深入掌握Java语言操作和管理磁盘文件的技术以及通过流读写数据的技术,实实在在提高实战水平,完成从菜鸟到高手的华丽转变。

62,616

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧