对不起我的英语不好。我尝试按字符读取真正快速的大尺寸文本文件(不使用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();