BufferedWriter与BufferedReader读写大文件的简单尝试

需求:我要人工分析文本编辑器打不开的很大的文本log(500M左右),分析里面的内容,找bug解bug。

要分析的是log文件,筛查里面的内容,最好能以行为单位来读取。所以这里没有用BufferedInputStream,先使用BufferedReader写了个小工具。解完bug回过头来分析,如果我要读取的是超大的文件呢?

看博客上有关于java处理大文件效率的文章http://blog.csdn.net/zhufenghao/article/details/51192043

Files.readAllBytes()方法在文件超过2个G的时候,会遇到内存不足的问题。但是BufferedInputStream是自带缓冲区的,文件中的内容是分片加载到内存中而不是一股脑传进来。

这里我们先不考虑效率问题,先保证程序稳定可用,分析log最好还是按行分析,但是不知道BufferedReader和BufferedWriter遇到大文件是不是会出问题,我这里打算自己使用BufferedWriter造一个大文件。

我的电脑配置16G,i78核,使用的jdk1.8,上简化的代码

    File outputfile = new File(path1 + "/" + "newlogfile.txt");   
    String temp ="xxxxxx";
    BufferedWriter outputallusedmethod = new BufferedWriter(new FileWriter(outputfile));
    for (int i = 0; i < 10000000; i++) {
        outputallusedmethod.write(temp);
        outputallusedmethod.newLine();
    }

temp是具体的文本内容,然后启动程序,往里咣咣的灌数据,灌数据的时候电脑卡了一些,不过灌了20多个G程序还在跑,于是手动杀掉了进程。留下了一个22G的大文件。然后使用BufferedReader逐行读这个超大文件,从头读到尾,没出问题。

然后去查找BufferedReader和BufferedWriter相关的博客http://blog.csdn.net/crave_shy/article/details/17206833

这里有个小问题,当一个文档只有一行且这一行非常大的时候,这个BufferedReader就不适用了。

你可能感兴趣的:(java底层)