我一直在阅读Jsch ScpTo Example,但是我不太理解他们所做的部分。更具体地说,我不太理解checkAck
方法的工作原理。
checkAck
方法:
static int checkAck(InputStream in) throws IOException{
int b=in.read();
// b may be 0 for success,
// 1 for error,
// 2 for fatal error,
// -1
if(b==0) return b;
if(b==-1) return b;
if(b==1 || b==2){
StringBuffer sb=new StringBuffer();
int c;
do {
c=in.read();
sb.append((char)c);
}
while(c!='\n');
if(b==1){ // error
System.out.print(sb.toString());
}
if(b==2){ // fatal error
System.out.print(sb.toString());
}
}
return b;
}
似乎这是在引用TCP协议中的ACK标志。然而,阅读TCP协议后发现,在TCP头中发送了相当大量的内容。但是,当调用该方法时,它并不需要对所有内容进行排序并提取标志。它只是假设ACK标志将成为流中的下一个整数。
有人能解释一下以下哪个适用:
1. 为什么这种假设是有效的, 2. 提取标志的正确方式, 3. 如何确保输入流在调用该方法之前始终处于正确的标志位置,或者 4. 如果这与TCP ACK标志无关,那么它与什么有关?