1

すべての文字が 1 行に収まる 50 GB を超えるファイルを読み取る必要があります。

ここでトリッキーな部分が来ます:すべての二重引用符文字で分割し、部分文字列 (srsName) を見つけて、分割された部分文字列の for ループで i+1 インデックス ("値") を持つ要素を取得する必要があります。

質問: プログレッシブ検索の実装や、メモリをいっぱいにする代わりに使用できるその他の方法はありますか?

簡単に言うと、ファイル内にはこれらの srsName サブストリングが非常に多くありますが、それらのすべてに同じ値が続くため、そのうちの 1 つだけを読み取る必要があります。

ファイルについて: xsl 変換用に準備されている xml です。ディスク/メモリの使用量をできるだけ少なくする必要があるため、インデントを作成する xslt を使用できません。

これは、値がファイル内でどのように表示されるかです。

<sometag:sometext srsName="value">
4

3 に答える 3

1

私はこのようにしました:

String myBuff = "";
char charBuff;
while(myBuff.length()<30)myBuff+=(char)br.read();

charBuff=(char)br.read();
try{
  while(true){
    myBuff=myBuff.substring(1)+charBuff;
    if(myBuff.startsWith("srsName"))break;
    charBuff=(char)br.read();
  }
}
catch(Exception e){}
value = myBuff.split("\"")[1];

br は私の BufferedReader です

于 2013-09-11T15:45:44.543 に答える
1

BufferedReader を使用してみることができます - http://download.oracle.com/javase/6/docs/api/java/io/BufferedReader.html

これにより、 read メソッドを使用して一度にメモリに読み込む文字数を指定できます。

于 2013-09-11T14:30:18.150 に答える