Java 如何逐步读取大文件?

Java 如何逐步读取大文件?,java,large-files,Java,Large Files,我在用java读取文件时遇到一些问题。它绝对是巨大的(2,5G),调整我的记忆也没有帮助。数据都在一行上,所以我不能一次读取一行。我想做的是读取文件,直到找到某个字符串,例如“”或“”,然后在这些字符串之间打印数据,以便清除内存,我可以继续读取文件的其余部分。所以我基本上在寻找一种读卡器,它从某个起始字符串开始读,在某个终止字符串停止读。有人能帮我吗?你需要打开一个读卡器(例如缓冲读卡器包装一个输入流读卡器包装一个文件输入流),并用读取(char[],int,int)或读取(char[])一次读

我在用java读取文件时遇到一些问题。它绝对是巨大的(2,5G),调整我的记忆也没有帮助。数据都在一行上,所以我不能一次读取一行。我想做的是读取文件,直到找到某个字符串,例如“”或“”,然后在这些字符串之间打印数据,以便清除内存,我可以继续读取文件的其余部分。所以我基本上在寻找一种读卡器,它从某个起始字符串开始读,在某个终止字符串停止读。有人能帮我吗?

你需要打开一个
读卡器
(例如
缓冲读卡器
包装一个
输入流读卡器
包装一个
文件输入流
),并用
读取(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个字符。