2011-01-30 14 views
3

私はProcessBuilderをよく知っていて、ストリームを処理します。 今私は、私が自動化しているプロセスが、私が提供する必要がある2つのファイルからいくつかの情報を読み込むという問題に遭遇しました。 現在、私はファイルを書き、ProcessBuilder経由でプログラムへのパスを提供しています。 私は近い将来何百万もの実行を期待しているので、メモリ内のすべての作業を行い、ファイルへの読み書きは行わないでスピードアップしたいと考えています。Java ProcessBuilderプロセスからのファイル読み取り要求をキャプチャしてストリームとして提供する方法は?

私ができる必要があるのは、自動化されたプログラムからのファイルオープン要求をキャプチャし、期待されるデータをストリングストリームなどから提供することです。 もちろん、もし私が与えているファイルパスがもっと良いストリームに置き換えられると、ProcessBuilderに何とか伝えることができたらどうでしょうか?

どうすればこの問題を解決できますか?

答えて

0

このようなI/Oアクセスを傍受して変更できるプロセスへのインタフェースはありません。実行を自動化しようとしているプログラムのソースコードがない限り、OSレベルで実行する必要があります。

ram diskを作成することで実現できました。例えばLinuxを利用しているのなら、それほど複雑ではありません。このリンクをご覧ください:Linux RAM Disk: Creating A Filesystem In RAM

あなたのJavaプログラムでnamed pipeを作成し、自動化されたプログラムへのパスとして渡すという別の方法があると思います。

+0

これは、Javaではこれが不可能であることが最も残念です。 ラムディスクの考え方(MSDOS以来見ていない)は、問題を解決するはずです。 – jallmer

+0

ProcessBuilderから実行されたバイナリを改ざんすることなく、** no **プログラミング言語を使用すると、そのようなトリックを行うことができます。 – aioobe

+0

Hmm、Condor(http://www.cs.wisc.edu/condor/)と他のクラスタプログラムは、どうにかしてバイナリを変更せずにリダイレクトトリックを行うことができなければなりません。 – jallmer

関連する問題