我们通过以下代码间歇性地获取“java.io.IOException:管道正在关闭”。本质上非常间歇性。有什么建议?我试图复制这个,当我从网络断开我的机器,然后我能够得到这个错误。 Siebel CRM会话打开后,此类读取和写入信息。
这里有Java类代码。
private Process _process;
private OutputStream _processOut;
private ByteArrayOutputStream _sessionOutput;
....
_processOut = _process.getOutputStream();
_sessionOutput = new ByteArrayOutputStream();
....
public void writeCommand(String command)
throws IOException
{
_processOut.write(command.getBytes());
_processOut.flush();
_sessionOutput.write(command.getBytes());
}
此处有实际错误:
java.io.IOException: The pipe is being closed
at java.io.FileOutputStream.writeBytes(Native Method)
at java.io.FileOutputStream.write(FileOutputStream.java:260)
at java.io.BufferedOutputStream.flushBuffer(BufferedOutputStream.java:65)
at java.io.BufferedOutputStream.flush(BufferedOutputStream.java:123)
at mySession.writeCommand(mySession.java:169)
答案 0 :(得分:6)
正在发生的事情是您尝试写入的外部进程已关闭连接到其标准输入流的管道。它可能刚刚退出。
尝试阅读并打印流程标准输出和标准错误,看看他们是否会对正在发生的事情做出解释。
答案 1 :(得分:2)
当你关闭了流,甚至在那之后你试图将数据写入流中时就是这种情况......
我想单个流在2个线程中处理,其中一个线程可能已关闭流(可能是以编程方式或在流关闭finally块中的某些异常)。并且没有通知另一个线程并尝试在该流上写入。
我希望这可以帮到你