0

最近发现通过 Jsch channel.getInputStream() 打印出大量文本的问题。

使用此代码:

outputStream_from_outputChannel = channel.getInputStream();
br = new BufferedReader(new InputStreamReader(outputStream_from_outputChannel));
while ( (line = br.readLine()) != null ){
    System.out.println(line);
    numOfLines++;
}

...有时(大部分时间)我会得到结果,但有时它会停止生成打印输出而不返回,这意味着打印将在中间停止并且线程将挂起。你认为这可能是什么原因造成的?到目前为止,我发现这不是正在超时的 jsch 会话。它的超时设置为 0。以前有人遇到过吗?

4

2 回答 2

0

您需要先检查流是否准备就绪\可用:

byte[] tmp = new byte[1024];
while (outputStream_from_outputChannel.available() > 0) {
    int i = is.read(tmp, 0, 1024);
    if (i < 0)
        break;
    someStrBuff.append(new String(tmp, 0, i));
}
于 2012-08-03T02:36:49.043 回答
0

如果远程服务器停止响应(由于网络连接、过载等原因),有时从通道输入流中读取会挂起,但流 readline 方法会永远阻塞。该问题的解决方案是使用以下方法设置服务器活动间隔:

session.setServerAliveInterval(int milliseconds);

它将在指定的时间间隔后发送捎带数据包以检查连接性。如果在检查连接时没有收到来自服务器的响应,readline 将返回。

于 2017-05-17T14:16:19.793 回答