- PR -

BufferedReaderのreadLineについて

投稿者投稿内容
aa
ぬし
会議室デビュー日: 2004/01/08
投稿数: 299
投稿日時: 2005-05-07 05:11
私の書いたサンプルは簡単なやつですけど、実際にはready()でループを回すのではなく、プロセスが終了したかどうかでループを回した方がいいと思います。

SUNNYDAYさんはwhileの使い方が分からないだけだと思えるんですけど。
SUNNYDAY
常連さん
会議室デビュー日: 2004/07/14
投稿数: 49
投稿日時: 2005-05-09 20:43
トーキーさん、aaさん、びしばしさん
ご返信ありがとうございました。
私の返信が遅くなってしまい、すみません。

引用:
--------------------------------------------------------------------------------
BufferedReaderクラスを使用する事が必須でないのであれば、
FileOutputStreamクラスを使えば、第2引数にtrueを渡す事で、
ファイルの最終行に追記できますよ。
--------------------------------------------------------------------------------
FileOutputStreamにもそのようなメソッドがあるのですね。
勉強になります。
ただ、今回はBufferedReaderを使わなくてはならないのです。
でも、アドバイスありがとうございました。

引用:
--------------------------------------------------------------------------------
それより、そもそもSUNNYDAYさんの「最新行」というのが、
どういう意味で使われているのか分かりかねるのですけど。
--------------------------------------------------------------------------------

すいません、実行するコマンドをvmstatと考えていましたので、
”vmstat 1”を実行したときに出力される最新行という意味でした。
言葉足りずですみません。

引用:
--------------------------------------------------------------------------------
processを実行して標準出力とかエラー出力とかが大量に出力
されるとしても、あくまで最後の1行だけ読みたい(それ以
外は決して読みたくない)という意味ですかね?
プロセスが実行中なら現実的に不可能な事は分かってますよね?
だって本当に最後かどうか誰も分かりませんから。
--------------------------------------------------------------------------------
はい。
以下でびしばしさんがおっしゃっていることが、
私の言いたかった事なんです。
すいません、うまく伝えられずに・・・

引用:
--------------------------------------------------------------------------------
「任意のその時点での最新」ならいいのではないですか ? つまり次々読み捨ててかまわない、と。

で本題ですが、「最新行を読んでは保存する」スレッドを作った方がいいでしょうね。ただ、
コード:
--------------------------------------------------------------------------------

while(reader.ready())
   vmstatLine=reader.readLine();


--------------------------------------------------------------------------------
だと最初に ready() が false を返したとき(今のところ最新の行を取り尽くしたとき)にスレッドが終わってしまうのでさらにループで囲った方がいいでしょうね。
おそらくループを回しっぱなしにすることによる負荷を気にしておられるのかもしれませんが、そのときは適当に Thread.sleep() か wait() を入れてみるといいかもしれません。

--------------------------------------------------------------------------------
びしばしさんが仰るとおり、任意の時点の最新です。
ただし、できるだけ最最新を取っておきたいので、
今回は、スレッドの実行処理で無限ループをさせ、
常にBufferedReaderから最新行を取ってメンバに設定することにしました。m(_ _)m

ご回答したくださったみなさま、
ありがとうございました。

スキルアップ/キャリアアップ(JOB@IT)