当我使用对象OutputSupplier时,正确执行添加第一行(CharStreams.write)。但是随后再次调用CharStreams.write会引发IOException

这是物体的正确行为吗?如果是这样,如何在不关闭内联流的情况下将String附加到供应商对象?

...

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);

最佳答案

这绝对是预期的行为。

CharStreams.writeOutputSupplier一起打开,写入和关闭输出流。这就是重点。可能Process.getOutputStream()不允许您多次打开和关闭。

一次完成所有写入,或更可能不使用CharStreams.write并自行关闭流。

09-13 12:07