byte[] buff = new byte[1024];
open file inputstream, fis;
open socket outputstream sos;
int read = 0;
while ((read = fis.read(buff)) != -1) {
    sos.write(buff);
}
fis.close();
sos.close();

解决方案 »

  1.   

    我就是在这个while循环里的时候出错了,我用JSP写的,和你这个几乎完全一样,就是在read和write的时候outofmemory的
      

  2.   

    我的buffer开始没有控制,使用的java默认值,具体多少不清楚,应该是64M吧,改成256就没问题了,但是关键是不能每个客户段都去改吧
      

  3.   

    加入buffer控制,你buffer的值开的多在呀?
      

  4.   

    client的j2se plat启动用的默认的,就是装上后就没管,发现不行以后,就在JVM Runtime的启动参数里加入-Xms256m -Xmx256m ,就是在把buffer开大了以后就成功了,但是不能去每个client都开大吧,这不就又成了C/S了吗
      

  5.   

    应该就是buffer控制默认值不能承受这么大的FileInputStream转换和写入,我就是想知道是不是能用自己的code在操作之前检测当前JVM RunTime的Buffer有多大,若发现不够的话根据机器的可用Memory再开出点来用,有这样的Code可用吗?
      

  6.   

    sigh.我们所说的buffer是你用来io缓存的空间,而不是jvm运行内存的空间。
      

  7.   

    to:takecare
    你好,很高兴能得到你的指导,我还是初级开发者,可能提的问题和回答会有些初级,你能否给出example?
      

  8.   

    byte[] buff = new byte[1024];
    //^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 开小点,如果是socket方面的话,4K是不错的选择。
    open file inputstream, fis;
    open socket outputstream sos;
    int read = 0;
    while ((read = fis.read(buff)) != -1) {
        sos.write(buff);
    }
    fis.close();
    sos.close();
      

  9.   

    如果要申请一个byte[Integer.MAX_VALUE] a的数组空间怎么办?
    也是outofmemory啊
      

  10.   

    faint 楼上的,你知道那个要多大的内存吗?