调试jdk1.6 sample\nio\server出现的问题

zhuaibing 2009-07-29 05:03:41
这个示例是一个http server,经测试打开htm正常显示,下载几十兆也能下载,但是我下载几百兆文件时,报错如下:
RequestHandler: java.io.IOException: 由于系统缓冲区空间不足或列队已满,不能执行套接字上的操作。



经我进一步查看,发现是ChannelIO.java中的
long transferTo(FileChannel fc, long pos, long len) throws IOException {

return fc.transferTo(pos, len, sc);
}

抛出异常错误~~~~


向各位请教一下,该如何解决这个问题,谢谢~~~~
...全文
190 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhuaibing 2009-07-31
  • 打赏
  • 举报
回复
自己最后再顶一下
czp3158 2009-07-30
  • 打赏
  • 举报
回复
路过侃侃^
zhuaibing 2009-07-30
  • 打赏
  • 举报
回复
我试了一下,是可行的,但是下载速度受到很大影响,而且调整MAX_SIZE大小没什么作用~~~


请各们高手继续帮忙解决一下,谢谢
zhuaibing 2009-07-30
  • 打赏
  • 举报
回复
http://www.ibm.com/developerworks/cn/java/j-zerocopy/index.html


不知是不是跟操作系统有关系
zhuaibing 2009-07-30
  • 打赏
  • 举报
回复
谢谢指教~~~~我试试

请高手们继续给出建议
radeonxhl 2009-07-30
  • 打赏
  • 举报
回复
1.一定要做缓存的,不做缓存的话任何服务器都禁不起你这么折腾

2.你觉得效率低,可能是因为底层的代码不适合这种缓存机制,你可以尝试修改底层代码,比如你可以放弃FileChannel,直接操作InputStream之类的,可能会有所改善吧
zhuaibing 2009-07-30
  • 打赏
  • 举报
回复
希望高手们亲自调试一下,谢谢啦~~~


我是想用来做文件下载的,好多文件是几个GB以上的,不知道通过这种方式是否可行?
zl3450341 2009-07-30
  • 打赏
  • 举报
回复
学习了 帮顶
冰思雨 2009-07-29
  • 打赏
  • 举报
回复
FileChannel fc = ...; FileChannel sc = ...;
long pos = ... ; long len = ... ;
final long MAX_SIZE = 1<<19;//512K个字节
long curPos = pos;
while(curPos+MAX_SIZE<pos+len){
sc.transferTo(fc,curPos,MAX_SIZE);
curPos += MAX_SIZE;
}
sc.transferTo(fc,curPos,pos+len-curPos);
冰思雨 2009-07-29
  • 打赏
  • 举报
回复
写个while循环,把整体拆分成多个分组来传输。
建议,每个分组的最大长度为512个字节。

62,614

社区成员

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

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