最近我发现通过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.有没有人遇到过这个?
答案 0 :(得分: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));
}
答案 1 :(得分:0)
如果远程服务器停止响应(由于诸如网络连接,过载等原因),有时从通道输入流中读取会挂起,但会永久地流式传输readline方法块。该问题的解决方案是使用以下方法设置服务器活动间隔:
session.setServerAliveInterval(int milliseconds);
它将发送捎带数据包,以便在指定的时间间隔后检查连接。如果在检查连接时没有收到服务器的响应,则readline将返回。