2

私はphpでproc_openを使用してJavaアプリケーションを呼び出し、処理するテキストを渡し、出力テキストを読み取ります。Java の実行時間は非常に長く、その理由は入力の読み取りにほとんどの時間がかかることがわかりました。それがphpのせいなのかJavaのせいなのかわかりません。

私のPHPコード:

$process_cmd = "java -Dfile.encoding=UTF-8 -jar test.jar";

$env = NULL;

$options = ["bypass_shell" => true];
$cwd = NULL;
$descriptorspec = [
    0 => ["pipe", "r"],     //stdin is a pipe that the child will read from
    1 => ["pipe", "w"],     //stdout is a pipe that the child will write to
    2 => ["file", "java.error", "a"]
];

$process = proc_open($process_cmd, $descriptorspec, $pipes, $cwd, $env, $options);

if (is_resource($process)) {

    //feeding text to java
    fwrite($pipes[0], $input);
    fclose($pipes[0]);

    //reading output text from java
    $output = stream_get_contents($pipes[1]);
    fclose($pipes[1]);

    $return_value = proc_close($process);

}

私のJavaコード:

public static void main(String[] args) throws Exception {

    long start;
    long end;

    start = System.currentTimeMillis();

    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    String in;
    String input = "";
    br = new BufferedReader(new InputStreamReader(System.in));
    while ((in = br.readLine()) != null) {
        input += in + "\n";
    }

    end = System.currentTimeMillis();
    log("Input: " + Long.toString(end - start) + " ms");


    start = System.currentTimeMillis();

    org.jsoup.nodes.Document doc = Jsoup.parse(input);

    end = System.currentTimeMillis();
    log("Parser: " + Long.toString(end - start) + " ms");


    start = System.currentTimeMillis();

    System.out.print(doc);

    end = System.currentTimeMillis();
    log("Output: " + Long.toString(end - start) + " ms");

}

3800 行の Java html ファイル (スタンドアロン ファイルとしてのサイズは最大 200KB) に渡します。これらは、ログ ファイル内の実行時間の内訳です。

Input: 1169 ms
Parser: 98 ms
Output: 12 ms

私の質問はこれです: なぜ入力は出力よりも 100 倍長くかかるのですか? 速くする方法はありますか?

4

1 に答える 1