Java 如何逐步读取大文件?
我在用java读取文件时遇到一些问题。它绝对是巨大的(2,5G),调整我的记忆也没有帮助。数据都在一行上,所以我不能一次读取一行。我想做的是读取文件,直到找到某个字符串,例如“”或“”,然后在这些字符串之间打印数据,以便清除内存,我可以继续读取文件的其余部分。所以我基本上在寻找一种读卡器,它从某个起始字符串开始读,在某个终止字符串停止读。有人能帮我吗?你需要打开一个Java 如何逐步读取大文件?,java,large-files,Java,Large Files,我在用java读取文件时遇到一些问题。它绝对是巨大的(2,5G),调整我的记忆也没有帮助。数据都在一行上,所以我不能一次读取一行。我想做的是读取文件,直到找到某个字符串,例如“”或“”,然后在这些字符串之间打印数据,以便清除内存,我可以继续读取文件的其余部分。所以我基本上在寻找一种读卡器,它从某个起始字符串开始读,在某个终止字符串停止读。有人能帮我吗?你需要打开一个读卡器(例如缓冲读卡器包装一个输入流读卡器包装一个文件输入流),并用读取(char[],int,int)或读取(char[])一次读
读卡器
(例如缓冲读卡器
包装一个输入流读卡器
包装一个文件输入流
),并用读取(char[],int,int)
或读取(char[])
一次读取块。由您负责查找令牌-包括从一个块开始到另一个块结束的情况。还要注意read()
可能无法填充缓冲区;您需要使用返回值来查看它实际写入数组的数据量。尝试以下伪代码:
char [] start = {'<','|','s','t','a','r','t','|','>' };
char [] start = {'<','|','e','n','d','|','>' };
char [] buff = new char[9];
while( true ) {
char c = readChar();
if( c == '<' ) {
buff = readChars( 9 ) ;
if( buff == start ) {
inside = true ;
skip( 9 ); // start
} else if( buff == end ) {
inside = false;
skip(7); // end
}
}
if( inside ) {
print( char ) ;
}
}
char[]start={''};
char[]start={''};
char[]buff=新字符[9];
while(true){
char c=readChar();
如果(c==”我会看看是否适合您的数据。您可以使用该方法更改用于标记输入的模式。我分心了一秒钟,Jon Skeet偷走了我的荣誉:(这种方法有一个问题:您可能会在读取文件之间中断字符串。例如:在一个缓冲区中,您可能会存储类似“blabla”的内容,因此它实际上不会work@KicoLobo:我不理解这个问题(给定<没有出现在字符串的其他地方)……嗯,实际上……它确实出现在世界其他地方string@Kico这就是我写(readChars(9)
)的原因,我说:伪代码,因为这里没有描述如何读取9个字符。