逐字符快速读取文本文件(java)
对不起我的英语。我尝试逐字符读取真正快速的大尺寸文本文件(不使用readLine()),但尚未获得。我的代码:逐字符快速读取文本文件(java),java,file,Java,File,对不起我的英语。我尝试逐字符读取真正快速的大尺寸文本文件(不使用readLine()),但尚未获得。我的代码: for(int i = 0; (i = textReader.read()) != -1; ) { char character = (char) i; } 它读取1GB的文本文件56666ms,如何读取速度更快 UDP 其方法读取1GB文件28833ms FileInputStream fIn = null; FileChan
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) {
}
FileInputStream fIn=null;
FileChannel fChan=null;
ByteBuffer-mBuf;
整数计数;
试一试{
fIn=新文件输入流(文本阅读器);
fChan=fIn.getChannel();
mBuf=字节缓冲分配(128);
做{
计数=fChan.read(mBuf);
如果(计数!=-1){
mBuf.倒带();
for(int i=0;i
读取输入的最快方法是使用缓冲区。下面是一个具有内部缓冲区的类的示例
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++];
}
}
此代码在7782ms内读取250mb
免责声明:
这段代码不是我的,它已经被用户“Kamalakannan CM”发布为CodeChef上一个问题的解决方案。我会使用它,它读起来是缓冲的。简短的示例:
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。如果您想使用不同的缓冲区大小,可以使用构造函数。或者,您可以在阵列缓冲区中读取:
....
char[] buffer = new char[255];
reader.read(buffer);
....
或一次读取一个字符:
int char = reader.read();
您必须在codechef上注册并解决一个问题,这样才能看到代码
int char = reader.read();