2012-04-20 10 views
1

多少曖昧なご質問、事前にお詫び申し上げます。PushbackReader相当品

私は小さなパーサーのトークン化部分を、Javaで構築パーサーを使って構築しています。これはPushbackReaderを使用し、最初に指定された文字列の最初の文字を検出する方法として含まれているStringを使用して、PushbackReaderを適切な状態にします(状態はStringを含む別のオブジェクトとしてトークンを作成します)。

ストリーム内で他の使用文字が見つからない場合にのみ、PushbackReaderが使用されているようです。最後の文字が読み込まれます。

CharBufferの追加で同じことが可能ですか?バッファを事前に定義する必要がないものが好ましい。

+0

があなたを持ってそれらを渡すために持っていますここのサンプルコードを見ましたか? http://oozinoz.xp123.com/bpwj.htm –

+0

それが私が元々持っていた場所です。私がしようとしていることが本質的に愚かであると私は思っています。 – JGrey

+0

私はそれがJavaの一部であることに気付きませんでした。参照:http://docs.oracle.com/javase/1.5.0/docs/api/java/io/PushbackReader.html。なぜあなたはすでにJavaに存在するものを再作成しようとしていますか? –

答えて

1

私が見たものに基づいて、彼は二つの理由PushbackReaderを選んだ:

  1. 彼は、個々の文字を扱うことができるリーダーを必要としていました。
  2. トークンを作成するときに、現在の文字がトークンの一部であるかどうかを判断するために1文字以上先に見る必要があったため、彼はストリームにバックアップする必要がありました。

たとえば、メソッドWhitespaceState.nextTokenでは、彼は空白文字をスキップします。彼はキャラクターを引き離してそれを見る。それが空白文字であれば、次の文字を引っ張ります。彼が最終的に空白ではない文字を引っ張ったとき、彼はそれをストリームに戻すので、ストリームを見る次のメソッドは正しい文字を見るでしょう。

あなたが読んで、ちょうど2つのメソッドを持つ、よりシンプルなものに置き換えることもできますが()、および未読()、あなたはそうすることによって、あなたはおそらく

  1. が全体に読み込みされることを忘れてはいけません入力し、次に入力を処理します。だから、大きなファイルを持っているなら、それを保存するためにメモリを使い果たしてしまうでしょう。
  2. 入力を一度ストリームとして読み込みますが、unread()からcharを格納して別の構造体に渡します。 PushbackReaderで

、彼は一度入力を通読して処理され、彼は全体の入力をバッファリングする必要はありません、また彼は未読()文字を格納し、周りに個別に

+0

意味があります。みんなありがとう。 – JGrey