- - PR -
DataInputStreamでのカレント操作
投稿者 | 投稿内容 | ||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2006-11-22 08:45
最大でもひとつ手前までだけが分かれば良いのならば、1行分のバッファー用の String をひとつ持っておき、それを使いまわすほうが良いと思います。 それだけでできることなのに、ストリームをバックワード方向にさかのぼるなどといったことは、(言葉は悪いですが)おぞましいと感じます。
のような感じが良いと思います。ただし、これはこれでパズルのようであり、分かりにくいこともあります。 バグのなさを優先するならば、緊急避難的に、
みたいなほうが、誰であっても見た目は分かりやすいとは思います。しかし、プロとしてはやるべきではないでしょうけど。。。
良く分かりませんが、では、ノーコメントで。 -- unibon {B73D0144-CD2A-11DA-8E06-0050DA15BC86} | ||||||||||||||||
|
投稿日時: 2006-11-22 16:56
そうですね。それで簡単にできる場合も多いと思います。
□ mark()/reset()の場合 「バックワード方向にさかのぼる」というよりは、 不定長なストリーム上に適切なWindowサイズを持つSavepointを設けて、 仮定と異なるデータの場合にはSavepointまでRollbackする形にできます。 想定以上の量のデータを読み込ませないように工夫する必要はありますが。 □ Pushback系の場合 本来ストリーム上に存在しなかったデータでも書き戻せる分、 謝ったデータを混入させてしまう可能性があります。 逆手に取って意図的に細工したデータを混入させることにも使えますけど。 #unibonさんの表現だと、これが一番おぞましいかと。 □ 変数で次の行を管理する場合 ひとつのメソッドで簡潔に解析できる場合はシンプルに作れますが、 解析が複雑だったり、複数のメソッドで構成される場合は より広いスコープで扱えるように管理する必要が出てきます。 どちらにせよ、変数の管理を誤るバグは潜みやすいです。 というわけで、どれも一長一短なんですよね。 |