请教如何使用bufferedreader读取百M到G量级的文件

时间:2021-08-11 19:59:03
如题,我使用bufferedreader默认的缓冲大小,然后br.readline()逐行读取,结果只能读取一部分文件。
    想请教如何能按bufferedreader缓冲的大小分批读取完整个文件?(即读取到缓冲区满以后自动清空缓冲,继续读直到文件结束)
    另外:bufferedreader默认的缓冲区大小是多少?如果自己制定太大的话会不会对程序运行效率产生影响?
    谢谢

9 个解决方案

#1


BufferedReader bin = BufferedReader(Reader in, int sz) 
          创建一个使用指定sz大小输入缓冲区的缓冲字符输入流。
          默认缓冲不清楚了,自己指定也行,应该不会有影响的

#2


即读取到缓冲区满以后自动清空缓冲,继续读直到文件结束//本来就是这样作的啊!你看看加上流名.flush()会怎么用;
-----------
分批读取完整个文件?应该不可以做到
-----------

#3


$ zz╭ ╮╭ ﹌╮.       $
$   z(o-.-o)(o-.-o) .      $
$ ┏~﹊︸ ̄~﹊︸ ̄~┓      $
$ IT者-IT开发者的网站--    $
$ 10万篇技术资料--天天更新 $
$ -----www.itzhe.cn-----   $

#4


读取百M甚至是G级量的数据,最好用MappedByteBuffer 来进行操作

import java.io.*; 
import java.nio.*; 
import java.nio.channels.*; 
public class LargeMappedFiles { 
  static int length = 0x8FFFFFF; // 128 Mb 
  public static void main(String[] args) throws Exception { 
    MappedByteBuffer out =  
      new RandomAccessFile("test.dat", "rw").getChannel() 
      .map(FileChannel.MapMode.READ_WRITE, 0, length); 
    for(int i = 0; i < length; i++) 
      out.put((byte)'x'); 
    System.out.println("Finished writing"); 
    for(int i = length/2; i < length/2 + 6; i++) 
      System.out.print((char)out.get(i));   //read file 
  } 
}

#5


据说回帖能得10分?

#6


YES!

#7


回帖试试

#8


其实我是来看lz的

#9


其实我想求解的

#1


BufferedReader bin = BufferedReader(Reader in, int sz) 
          创建一个使用指定sz大小输入缓冲区的缓冲字符输入流。
          默认缓冲不清楚了,自己指定也行,应该不会有影响的

#2


即读取到缓冲区满以后自动清空缓冲,继续读直到文件结束//本来就是这样作的啊!你看看加上流名.flush()会怎么用;
-----------
分批读取完整个文件?应该不可以做到
-----------

#3


$ zz╭ ╮╭ ﹌╮.       $
$   z(o-.-o)(o-.-o) .      $
$ ┏~﹊︸ ̄~﹊︸ ̄~┓      $
$ IT者-IT开发者的网站--    $
$ 10万篇技术资料--天天更新 $
$ -----www.itzhe.cn-----   $

#4


读取百M甚至是G级量的数据,最好用MappedByteBuffer 来进行操作

import java.io.*; 
import java.nio.*; 
import java.nio.channels.*; 
public class LargeMappedFiles { 
  static int length = 0x8FFFFFF; // 128 Mb 
  public static void main(String[] args) throws Exception { 
    MappedByteBuffer out =  
      new RandomAccessFile("test.dat", "rw").getChannel() 
      .map(FileChannel.MapMode.READ_WRITE, 0, length); 
    for(int i = 0; i < length; i++) 
      out.put((byte)'x'); 
    System.out.println("Finished writing"); 
    for(int i = length/2; i < length/2 + 6; i++) 
      System.out.print((char)out.get(i));   //read file 
  } 
}

#5


据说回帖能得10分?

#6


YES!

#7


回帖试试

#8


其实我是来看lz的

#9


其实我想求解的