gpt4 book ai didi

java - 逐字符快速读取文本文件(java)

转载 作者:行者123 更新时间:2023-11-30 08:09:44 30 4
gpt4 key购买 nike

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

}

最佳答案

读取输入最快的方法是使用缓冲区。这是一个具有内部缓冲区的类的示例。

class Parser
{
final private int BUFFER_SIZE = 1 << 16;
private DataInputStream din;
private byte[] buffer;
private int bufferPointer, bytesRead;

public Parser(InputStream in)
{
din = new DataInputStream(in);
buffer = new byte[BUFFER_SIZE];
bufferPointer = bytesRead = 0;
}

public int nextInt() throws Exception
{
int ret = 0;
byte c = read();
while (c <= ' ') c = read();
//boolean neg = c == '-';
//if (neg) c = read();
do
{
ret = ret * 10 + c - '0';
c = read();
} while (c > ' ');
//if (neg) return -ret;
return ret;
}

private void fillBuffer() throws Exception
{
bytesRead = din.read(buffer, bufferPointer = 0, BUFFER_SIZE);
if (bytesRead == -1) buffer[0] = -1;
}

private byte read() throws Exception
{
if (bufferPointer == bytesRead) fillBuffer();
return buffer[bufferPointer++];
}
}

这个解析器有一个函数可以给你 nextInt,如果你想要下一个字符,你可以调用 read() 函数。

这是最快的读取文件的方式(据我所知)

你可以像这样初始化这个解析器:

Parser p = new Parser(new FileInputStream("text.txt"));
int c;
while((c = p.read()) != -1)
System.out.print((char)c);

此代码在 7782 毫秒内读取 250mb。

免责声明:该代码不是我的,它已被用户“Kamalakannan CM”发布为 CodeChef 上问题的解决方案

关于java - 逐字符快速读取文本文件(java),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32211978/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com