解决方案 »

  1.   

    楼主首先要明白读文件用byte[]数组的意义,你才会更加明白这个组数设置的大小.
    byte[]的大小,说明你一次操作最大字节是多少,当然,这个越大,一次处理,所占内存就多大.is.available()返回的应该是文件可读字节数,也就是文件总大小,你这是要一次读完9M到内存后才进行操作.这太奢侈了吧.
      

  2.   

    你需要一次性把所有的都读到内存里面吗?如果只是按行读 就按传统的方式 定义一个定长的byte数组去读取,然后判断是否换行如果需要一次加载到内存,这样的方式也可以的
      

  3.   

    设定固定大小分批读。就跟TCP/IP协议一下,总不可能一下子把所有的内容一下子传输吧,所以需要分包传输。
      

  4.   

    所以啊,我就是不知道怎么确定这个byte数组的大小呀
      

  5.   


    如果是一次性读取的话,是不是读完之后,内存就释放了?还是还要等GC处理一下,这个内存才能释放啊?当你独到内存中后,将数据读出,gc会去释放内存
      

  6.   


    如果是一次性读取的话,是不是读完之后,内存就释放了?还是还要等GC处理一下,这个内存才能释放啊?当你独到内存中后,将数据读出,gc会去释放内存
    好像问的离题了。我是不知道怎么设置 这个byte[]的数组的大小呀。所以才来请教你们的,不知道你有没有什么好的建议啊。byte[]的设置和文件的大小也有关系吧?谢谢哈
      

  7.   

    我就是不知道怎么确定这个byte[]的数组的大小呀
      

  8.   

    我就是不知道怎么确定这个byte[]的数组的大小呀
    楼主有认真看我们的回答么?这个byte[]数组的大小跟你读文件时候内存用到的大小有关,byte[]数组的使用是说,你一次读文件的时候最多读多少进内存,比如你的程序,设的是文件的大小,也就是9M,也就是说,程序会一次性读完9M的文件到内存里,如果你的内存不足了,就会溢出,如果程序读得慢,没读完9M之前,你是不能操作其他的.如果你设的大小是1M(1024*1024),就是说程序会分9次来读这个文件,第一次读1M到内存,然后马上处理这1M的内容,处理完后又继续读.虽然读的是9M的文件,其实你的内存只用1M来处理,节省了很多空间.当然,设得小,说明I/O操作会比较频繁,I/O操作耗时比较长,这多少会有点性能上的影响.这看你是想用空间换时间,还是想用时间换空间了.
    回到楼主的问题,这个大小怎么设,根据你的实际情况,或者根据你的心情,都可以.我个人习惯是1KB,也就是1024.时间慢总比内存溢出程序崩溃强.如果内存足够的话,我会考虑设大点.
      

  9.   

    我就是不知道怎么确定这个byte[]的数组的大小呀
    楼主有认真看我们的回答么?这个byte[]数组的大小跟你读文件时候内存用到的大小有关,byte[]数组的使用是说,你一次读文件的时候最多读多少进内存,比如你的程序,设的是文件的大小,也就是9M,也就是说,程序会一次性读完9M的文件到内存里,如果你的内存不足了,就会溢出,如果程序读得慢,没读完9M之前,你是不能操作其他的.如果你设的大小是1M(1024*1024),就是说程序会分9次来读这个文件,第一次读1M到内存,然后马上处理这1M的内容,处理完后又继续读.虽然读的是9M的文件,其实你的内存只用1M来处理,节省了很多空间.当然,设得小,说明I/O操作会比较频繁,I/O操作耗时比较长,这多少会有点性能上的影响.这看你是想用空间换时间,还是想用时间换空间了.
    回到楼主的问题,这个大小怎么设,根据你的实际情况,或者根据你的心情,都可以.我个人习惯是1KB,也就是1024.时间慢总比内存溢出程序崩溃强.如果内存足够的话,我会考虑设大点.哈哈  明白了  谢谢你