0

object を使用するとOutputSupplier、最初の行の追加 ( CharStreams.write) が正しく実行されます。しかし、CharStreams.writeもう一度呼び出すと、IOException.

これはオブジェクトの正しい動作ですか? もしそうなら、どうすればStringインライン ストリームを閉じずにサプライヤー オブジェクトに a を追加できますか?

...

final Process process = Runtime.getRuntime().exec("su");

OutputSupplier<OutputStreamWriter> writerSupplier = CharStreams.newWriterSupplier(new OutputSupplier<OutputStream>() {
    @Override
    public OutputStream getOutput() throws IOException {
        return process.getOutputStream();
    }
}, Charsets.UTF_8);
// ok
CharStreams.write(someCommand, writerSupplier);
...
// IOException
CharStreams.write(otherCommand, writerSupplier);
4

1 に答える 1

1

これは間違いなく予想される動作です。

CharStreams.writeを使用してOutputSupplier、出力ストリームを開き、書き込み、閉じます。それがポイントの一部です。おそらく、Process.getOutputStream()複数回開いたり閉じたりすることはできません。

一度にすべての書き込みを行うかCharStreams.write、ストリームを自分で閉じて処理しないでください。

于 2012-11-05T22:03:51.873 に答える