当我使用对象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.write
与OutputSupplier
一起打开,写入和关闭输出流。这就是重点。可能Process.getOutputStream()
不允许您多次打开和关闭。
一次完成所有写入,或更可能不使用CharStreams.write
并自行关闭流。