我现在有一个文本文件,需要一行一行读取出来,数据量很大。
Java code
String temp = null;
String[] args = null;
while((temp=reader.readline())!=null){
     args = temp.split("[|]");
     if(null!=dao.findbyid(args[2])){
        System.out.println(temp);
     }
}
reader.close();
像这种操作大量字符串数据的应该怎么做?StringBuffer类拼接字符串我晓得了,其他的呢?

解决方案 »

  1.   

    有一个 叫 line什么reader你试试那个 吧
      

  2.   

    这个没有任何问题的啊,你的又不需要将String存起来,每次用完就扔掉了,无关的啊.
      

  3.   

    是不是要用到mapchannel 啊,好像是大文件会内存溢出 什么的...
      

  4.   

    但是jvm的内存是一直增大的
      

  5.   

    增大是因为JVM并不会马上就去回收啊
    dao.findbyid(args[2]))
    还有可能是这里边的问题,要一行一行的去分析一个文件,方法就是你这样的啊.你又没有把每一行加上起来,那样才说要用StringBuffer之类的,减少String重构
      

  6.   

    这个跟String的关系不会太大,如果真是跟它有关,感觉也是没有办法处理的,并不是因为加大了String,每次只是引用一下,然后就放开了,你看看dao.findbyid,是不是每次都创建一个数据库连接,还有是否使用了prepareSta....等.参考一下这些方面的
      

  7.   

    找到原因了,是dao的问题,我用的hibernate。hibernate的session缓存了数据,导致数据越来越多。
    定时clear一下session就可以了。
      

  8.   

    如果文件大,应该用BufferedReader或者nio的文件映射,再一个,看你的方法应该根据ID查询数据,应该写到一个SQL里一起查,一个一个查,频繁访问数据库,感觉效率有点低,个人意见,仅作参考。
      

  9.   


    既然你是判断一下对象是否存在的,那就要不每次都get对象好了,就执行HQL或者SQL判断一下.