当我使用对象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);
答案 0 :(得分:1)
这绝对是预期的行为。
带有CharStreams.write
的 OutputSupplier
打开输出流,写入并关闭它。这就是重点。据推测,Process.getOutputStream()
不允许您多次打开和关闭。
要么立即执行所有写操作,要么更有可能不使用CharStreams.write
并自行处理关闭流。