对不起我的英语不好。我尝试按字符读取真正快速的大尺寸文本文件(不使用readLine()),但尚未获取。我的代码:

for(int i = 0; (i = textReader.read()) != -1; ) {
            char character = (char) i;
        }


它读取了1GB的文本文件56666ms,我如何才能更快地读取?

UDP协议

其方法读取1GB文件28833ms

FileInputStream fIn = null;
        FileChannel fChan = null;
        ByteBuffer mBuf;
        int count;

        try {
            fIn = new FileInputStream(textReader);
            fChan = fIn.getChannel();
            mBuf = ByteBuffer.allocate(128);

            do {
                count = fChan.read(mBuf);

                if(count != -1) {
                    mBuf.rewind();

                    for(int i = 0; i < count; i++) {
                        char c = (char)mBuf.get();
                    }
                }

            } while(count != -1);

        }catch(Exception e) {

        }

最佳答案

我会使用BufferedReader,它读取缓冲。简短示例:

import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.nio.CharBuffer;

public class Main {
    public static void main(String... args) {
        try (FileReader fr = new FileReader("a.txt")) {
            try (BufferedReader reader = new BufferedReader(fr)) {
                 CharBuffer charBuffer = CharBuffer.allocate(8192);
                 reader.read(charBuffer);
            } catch (IOException e) {
                 e.printStackTrace();
            }
        } catch (FileNotFoundException e) {
           e.printStackTrace();
        } catch (IOException e) {
           e.printStackTrace();
        }
   }
}


默认构造函数使用的默认缓冲区大小为8192。如果要使用其他缓冲区大小,可以使用this构造函数。另外,您可以读取数组缓冲区:

 ....
 char[] buffer = new char[255];
 reader.read(buffer);
 ....


或一次读取一个字符:

int char = reader.read();

09-03 20:36