2010-11-20 9 views
1

UNIX環境では、バッファリングされたデータをSystem.inに渡す必要があります。バッファリングされたデータをプログラムからファイルにリダイレクトする方法

java the_program < input.txt 

プログラムが正しく実行されません。

端末からのキーボード入力を渡すと、私のような方法でファイルから入力をリダイレクトしようとするがあれば、大丈夫です。

バッファリングされたデータをstdin経由でプログラムに渡すのではなく、どのようにしてバッファリングすることができますか?

私が試してみました:

stdbuf -oL cat input.txt | java the_program 

stdbuf -i0 java the_program < input.txt 

など

grep --line-buffered . input.txt | java the_program 

をが、運がなかったです。

アイデアや提案はありますか?

答えて

0

ほとんどの問題はJavaプログラムにあります。なぜ入力をラインバッファにする必要がありますか?これは、Cのfgets()のアナログを使用するように設計されているので、一度に1行ずつ読み込むだけです。そのようなアナログがない場合は、そのサービスを提供する関数/クラスを書く必要があります。提供されているユニットを読み込み、ライン境界で分割または連結することができます。

パイプファイル記述子でfstat()システムコールを使用し、データがない場合(st_sizeのメンバーを参照)、パイプに書き込むなど、移植不可能な操作に戸惑うことがあります。しかし、それが動作することは保証されていません - ポータブルではないことを意味します。明らかに、標準I/Oを使用している場合は、一度に1行ずつプログラムを書き出し、出力をフラッシュします。

+0

はい、私は明らかにすべきでした。 Javaプログラムは、非行バッファの入力に失敗するように設計されており、 "the_program"は標準入力を受け入れるプログラムであると想定しなければなりません。キーボードからの入力をシミュレートすることですが、テキストファイル。 – Milo

関連する問題