Java上传大量文件如果避免内存溢出问题

MR小陳 2011-02-12 11:17:48
RT..

思路:

利用两个线程:线程1.读取上传的文件(2M)到内存。线程2.处理内存中的数据。

但总认为这里处理上面有些许问题。


求..实现代码。

任何想法或者意见均可。
...全文
2643 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
wodejiazaidongbeia 2011-05-13
  • 打赏
  • 举报
回复
LZ你问题是怎么解决的嗫?小弟也遇到和你一模一样的问题,能分享一下心得吗?或者传个源码看看,感激涕零啊!!!
wangjiangbo2 2011-02-15
  • 打赏
  • 举报
回复
smartupload能支持1G以上的文件上传吗?
MR小陳 2011-02-15
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 bao110908 的回复:]

TB 级的数据你用 HTML 的 form 上传?

一个文件就有 TB 级别,你确定这是文件?
[/Quote]

呵呵。 搞错了..

不过现在问题已经解决了。

谢谢各位兄台!
MR小陳 2011-02-14
  • 打赏
  • 举报
回复
各位大虾。

假如现在我只要求Java能上传1G的单个文件。能有什么好方法吗?

smartupload在不设计tomcate好像不能。

  • 打赏
  • 举报
回复
TB 级的数据你用 HTML 的 form 上传?

一个文件就有 TB 级别,你确定这是文件?
MR小陳 2011-02-12
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 afer198215 的回复:]

缓存换成本地文件,
线程1:从客户端接受到的写到本地缓存文件里。
线程2:处理本地缓存的数据。

本地缓存可以是临时文件。
放内存太危险了,如果数据处理不及时,很容易内存溢出。
[/Quote]

有类似的处理代码吗?
MR小陳 2011-02-12
  • 打赏
  • 举报
回复
G级吧。

[Quote=引用 5 楼 ifengshow 的回复:]

多少大量的?
[/Quote]
ifengshow 2011-02-12
  • 打赏
  • 举报
回复
多少大量的?
想喝咖啡的貓 2011-02-12
  • 打赏
  • 举报
回复
缓存换成本地文件,
线程1:从客户端接受到的写到本地缓存文件里。
线程2:处理本地缓存的数据。

本地缓存可以是临时文件。
放内存太危险了,如果数据处理不及时,很容易内存溢出。
FunnyRabbit 2011-02-12
  • 打赏
  • 举报
回复
我也有这样的问题。等待好的解决办法
MR小陳 2011-02-12
  • 打赏
  • 举报
回复
数据TB级..

2M是一次读取2M到内存中..

[Quote=引用 1 楼 yangshuai518 的回复:]

2M的不算大,用struts的上传就够了啊。为什么会内存溢出?
[/Quote]
沉默的飞鱼 2011-02-12
  • 打赏
  • 举报
回复
2M的不算大,用struts的上传就够了啊。为什么会内存溢出?
MR小陳 2011-02-12
  • 打赏
  • 举报
回复
额。 错了...邮箱是:hillen_chen@163.com
MR小陳 2011-02-12
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 heardy 的回复:]

这个是片段啊

我这个我之前是下载时用的,先从数据库获取byte流 写入file里面缓存 在进行下载 删除

由于内存存不了这么多数据 所以要放到file里面先 进行缓存

还有 你传的数据量如此之大 如果传输中断, 那不是前面的白费了

我任务前台先把要传输的数据进行分割,然后一段一段的传到服务器,保持续传功能
[/Quote]

可以将你的下载源码给我吗?

hillen_chan@163.com
heardy 2011-02-12
  • 打赏
  • 举报
回复
这个是片段啊

我这个我之前是下载时用的,先从数据库获取byte流 写入file里面缓存 在进行下载 删除

由于内存存不了这么多数据 所以要放到file里面先 进行缓存

还有 你传的数据量如此之大 如果传输中断, 那不是前面的白费了

我任务前台先把要传输的数据进行分割,然后一段一段的传到服务器,保持续传功能
MR小陳 2011-02-12
  • 打赏
  • 举报
回复
来个正点的注释啊。
MR小陳 2011-02-12
  • 打赏
  • 举报
回复
这能行?

[Quote=引用 8 楼 heardy 的回复:]

Java code

String fileName = null;
fileName = "name";
File f = new File( fileName );
FileOutputStream fi = null;
fi = new FileOutputStream( f );
IOUtils.write( b, fi );//将接受到的byte流写入file里面
IOUtils.c……
[/Quote]
heardy 2011-02-12
  • 打赏
  • 举报
回复

String fileName = null;
fileName = "name";
File f = new File( fileName );
FileOutputStream fi = null;
fi = new FileOutputStream( f );
IOUtils.write( b, fi );//将接受到的byte流写入file里面
IOUtils.closeQuietly( fi );//关闭流写入
处理缓存文件f
f.delete();//删除缓存文件

81,092

社区成员

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

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