将result声明成StringBuffer试试看了
result += new String(content, m_encodeType);
改成
result.append(new String(content, m_encodeType));

解决方案 »

  1.   

    我试了一下JDK附带的Notepad示例程序,同样会有OutofMemoryException异常错误。
    因为文本内容可能是ANSI或是UNICODE等编码形式,所以不能逐个字节读入文件内容,只有借助JAVA对UNICODE的支持来实现。
    如果有其他的将文本内容读出并转为UNICODE编码的方法同样感谢。
      

  2.   

    刚才说错了,是 java.lang.OutOfMemoryError 错误。试了一下楼上的方法,仍然行不通。
      

  3.   

    你的内存多大?128么?用FileReaderBufferedReader dis = new BufferedReader(new FileReader(filename);每次读一行,读完进行过你要的处理以后立刻写到别的文件里面去。像你现在这种处理根本不是办法的。
      

  4.   

    我用过的方法:
    启动的时候设置JVM的可用内存,因为默认的大小才16M(好像是吧)
    可以用java -Mx256m 设成256M
      

  5.   

    请问bluesmile979要怎么改比较好?谢谢了
      

  6.   

    不管是物理内存还是虚拟内存,JVM启动时,默认只使用16M的内存,如果不够,就GC,若还不够,就只好Insufficient Memory Error了
      

  7.   

    我说的是改变JVM的可用内存,不是操作系统的虚拟内存大小
      

  8.   

    同时打开input流和output流,读一次写一次,这样你用的最大内存就是blockSize = 1024 * 1024了
      

  9.   

    JAVA默认只使用16M的内存?JAVA虚拟机有没有实现虚拟内存机制的?如果没有,岂不是对于需要分配大块内存的程序有很多限制,而且通过启动虚拟机时改变参数来实现也太令人不爽了吧。小弟刚从VC转到JAVA,肯请各位指教。
      

  10.   

    我觉得这个问题用NIO来解决比较好一些,NIO是非阻塞IO,效率要比传统IO要高一些,尤其是读写如此大的文件,但也是只能读出一点处理一点,不可能将文件全部加载到内存中。
      

  11.   

    SUN JVM默认分配堆的上限为16MB,所以在消耗了大约16MB内存后遇到了OutOfMemoryError。JVM 如何将系统内存用作它的堆。当运行 java.exe 时,您使用一定的选项来控制垃圾收集堆的起始大小和最大大小(分别用 -ms 和 -mx 表示)。Sun JDK 1.1.8 的默认起始设置为 1 MB,默认最大设置为 16 MB。IBM JDK 1.1.8 的默认最大设置为系统总物理内存大小的一半。这些内存设置对 JVM 在用尽内存时所执行的操作有直接影响。JVM 可能继续增大堆,而不等待一个垃圾收集周期的完成。
      

  12.   

    另外,我觉得你应该用两个Stream,一个Input,一个Output,而不是把文件统统读到内存里面。
    读完一部分,写一部分,这样内存里只保存文件的某个片断,而不是整个文件
      

  13.   

    看样子只能改变实现方式了。
    哪里有JAVA内存管理的资料?本以为用JAVA可以不用管内存分配问题,看样子还是得要搞明白才行
      

  14.   

    以java2为例,sun jvm默认堆上限为64m,只有超出-Xmx选项指定上限,jvm才会出现OutOfMemoryError。
    另外,jvm可使用虚拟内存。在企业级的开发中使用-Xmx对系统进行调优是很正常的。
      

  15.   

    如果我必须分配一块大于 -mx 和物理内存的大小时该怎么办呢?
    jvm -Xmx 可以指定超过物理内存大小的数字吗?比如windows下每个进程的可用地址空间大小 4GB还有一个问题,指定jvm -Xmx 只影响本程序还是影响当前机器上运行的所有JAVA程序?
      

  16.   

    当然可以分配超过物理内存大小的堆
    JVM是工作在OS之上的,OS管理物理内存和虚拟内存,对JVM来说,都是透明的。
    比如JVM需要200M,物理内存128M,那么OS会去使用虚拟内存,对JVM来说,它反正得到了200M