我的报错情况是连接成功,然后超过90s不操作,自动断开连接,此时没判断连接是否正常,直接读取文件,导致报错。
错误步骤如下:
Channel channel = sshSession.openChannel("sftp");//创建sftp对象
channel.connect();
ChannelSftp sftp = (ChannelSftp) channel;
//等待时间超过超时时间(我的是90s)
sftp.cd(Directory);//报错
cd()方法源码:
public void cd(String path) throws SftpException{
try{
((MyPipedInputStream)io_in).updateReadSide();
path=remoteAbsolutePath(path);
path=isUnique(path);
......
updateReadSide()方法报错,源码如下:
public synchronized void updateReadSide() throws IOException {
if(available() != 0){ // not empty
return;
}
in = 0;
out = 0;
buffer[in++] = 0;
read();
}
read()方法报错,源码如下:
public synchronized int read() throws IOException {
if (!connected) {
throw new IOException("Pipe not connected");
} else if (closedByReader) {
throw new IOException("Pipe closed");
} else if (writeSide != null && !writeSide.isAlive()
&& !closedByWriter && (in < 0)) {
throw new IOException("Write end dead");
}
......