自己测试了下,读取过程中报异常:Out of memory
D/AndroidRuntime(  364): Shutting down VM
W/dalvikvm(  364): threadid=1: thread exiting with uncaught exception (group=0x40015560)
E/AndroidRuntime(  364): FATAL EXCEPTION: main
E/AndroidRuntime(  364): java.lang.OutOfMemoryError测试环境:
android版本:2.3
内存:800M
CPU:800Mhz测试代码:
FileInputStream file_read = new FileInputStream(file);
StringBuffer sb = new StringBuffer();
int i;
char c;
while((i = file_read.read()) != -1)
{
    c = (char)i;
    sb.append(c);
}
请问下各位,
(1)android 对于超大文件(比如1G的txt文本文件)的读写是否支持?
(2)读取的方式是先写如buffer中,那么andorid是否也跟windows 一样有虚拟内存什么的?否则800M的内存,无法读取1G的文件吧?
(3)如果支持超大文件,应该用什么方式读取呢?谢谢了

解决方案 »

  1.   

    你是在java中读写的,java的heap最大也就是32m,你这样读写的方法,很快Stringbuffer就超过这个大小了,所以不是不支持大文件读写,而是你的内存使用过多了。
      

  2.   


    是的,确实是dalvikvm-heap报错,那么应该怎么读写呢?有没有什么资料可以参考下的?
      

  3.   

    多谢,其实没什么需求,我只是想作个压力测试,只有读取,没有写入操作,所以缓冲区内的数据也没法清除
    分段的话,因为read只有返回-1表示读取结束,没有其他的返回状态那么是不是可以根据Buffer中读取数据的大小进行判断? 又如何让分段时读取的数据都是下一次的分段内容?
      

  4.   

    一般,申请个固定size的buffer来保存,每次直接read这个size大小的buffer,当返回的值小于size就是读取完毕了