行をリダイレクトする方法とは対照的にバッファされたデータをブロックするために、ファイルからプログラムにデータをバッファリング
-
26-09-2019 - |
質問
私はSystem.inに渡される行バッファされたデータを必要とするUNIX環境でJavaプログラムを持っています。
端末からのキーボード入力を渡すには、私のような方法でファイルから入力をリダイレクトしようとするがあれば、大丈夫です
java the_program < input.txt
プログラムが正しく実行されません。
はラインバッファリングされたデータは、標準入力経由でプログラムに渡されるブロックとは反対に、バッファ私がしていることができてどのような方法?
私が試してみました。
stdbuf -oL cat input.txt | java the_program
と
stdbuf -i0 java the_program < input.txt
など
grep --line-buffered . input.txt | java the_program
が、運がなかった。
任意のアイデアや提案?
解決
問題のほとんどは、Javaプログラムである - なぜ/どのようにラインをバッファリングするための入力を必要としませんか?ちょうど時間で行を読み取るようにCのfgets()
のアナログを使用するように設計されなければなりません。そのような類縁体が存在しない場合は、多分あなたは、そのサービスを提供して機能/クラス、あなたが提供しているものは何でも単位で読むことができるものは何でも撮影、及びライン境界のいずれかの分割またはCONCATENATEを記述する必要があります。
あなたは、このようなことにはデータ(fstat()
メンバーを見ている)が存在しない場合にのみ、パイプへの書き込み、パイプファイルディスクリプタにst_size
システムコールを使用するなど、移植不可能操作にふけるする必要があり、それに失敗。そうではないかもしれ移植不可能な手段を - しかし、それが動作することを保証するものではありません。もちろん、あなたのプログラムが一度にラインを書き込み、標準I / Oを使用した場合の出力をフラッシュすることを確認したい。
所属していません StackOverflow