1

System.in にライン バッファ データを渡す必要がある UNIX 環境の Java プログラムがあります。

端末からキーボード入力を渡すことは問題ありませんが、次のような方法でファイルから入力をリダイレクトしようとすると:

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

しかし、運がありませんでした。

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

4

1 に答える 1

0

問題のほとんどはJavaプログラムにあります-なぜ/どのように入力をラインバッファリングする必要があるのですか?fgets()一度に1行だけ読み取るように、Cの類似物を使用するように設計する必要があります。そのような類似物がない場合は、そのサービスを提供する関数/クラスを作成し、提供されている単位で読み取ることができるものをすべて取得し、行の境界で分割または連結する必要があります。

fstat()これに失敗すると、パイプファイル記述子でシステムコールを使用し、データがない場合(メンバーを確認する場合)にのみパイプに書き込むなど、移植性のない操作にふける必要がある場合がありst_sizeます。ただし、動作する保証はありません。移植できないということは、動作しない可能性があることを意味します。もちろん、標準のI / Oを使用している場合は、プログラムが一度に1行ずつ書き込み、出力をフラッシュするようにします。

于 2010-11-20T01:01:57.263 に答える