LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1484|回复: 3

读取文本文件内容,哪个函数比较块?

[复制链接]
发表于 2006-1-19 14:35:47 | 显示全部楼层 |阅读模式
对于一个大约1K的文本文件,需要频繁的读取它的全部内容。请问:下面两个函数哪个更适合?或者哪位高手给出个更好的函数,谢谢了。

  1.         public static String getContents(String fileName){
  2.                 StringBuffer sb = new StringBuffer();
  3.                 try{
  4.                         BufferedReader in =        new BufferedReader(new FileReader(fileName));
  5.                         String s;
  6.                         while((s = in.readLine())!=null){
  7.                                 sb.append(s+"\n");
  8.                         }
  9.                         in.close();
  10.                 }catch(Exception e){}
  11.                 return sb.toString();
  12.         }
  13.         public static String getContents2(String fileName){
  14.                 String contents = "";
  15.                 try{
  16.                         RandomAccessFile rf = new RandomAccessFile(fileName,"r");
  17.                         byte[] text = new byte[(int)(rf.length())];
  18.                         rf.readFully(text);
  19.                         contents = new String(text);
  20.                         rf.close();
  21.                 }catch(Exception e){}
  22.                 return contents;
  23.         }
复制代码
发表于 2006-1-19 15:13:04 | 显示全部楼层
都不合适。。。。
最好用缓存的方式。。。
将数据分步导入一个较小的byte数据组(如 4096)中,一步的取出...
上的代码,如果数据特别大,会大大占用内存。。。当数据很大时,会把内存占满,直接当机...
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-1-19 16:39:01 | 显示全部楼层
谢谢二楼的兄弟。不过,据我所知的应用,文件肯定不超过10K,而且不能使用缓存。我确实需要这样的一个函数,请兄弟帮忙想个好法子吧。
回复 支持 反对

使用道具 举报

发表于 2006-1-20 23:07:33 | 显示全部楼层
我觉得第二种快些!
因为第一种返回的所有字符串是靠读取一行字符串再使用Stringbuffer进行拼接,而且每读取一行都要生成一个新的StringBuffer对象,感觉整个读取操作是在字符串级进行的!
而第二种情况是通过native直接读取所有文件为二进制,在通过String的构造函数将字节数组转换成字符数组,从而生成字符串,整体读取操作是在字符级进行。
不过第一种进行读取文本时对于国际化转码的问题解决的很透彻:在生成Reader的时候就可以设定正确的编码格式,而第二种在国际化转码上问题很多,起因于String 的构造函数中设定了编码,但是经常得到不全面的转码结果,而且里面的转换函数已经不赞成使用了!如果第一种可以使用,尽量采用第一种的方式!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表