FTPClient中使用completePendingCommand方法注意事项

2019-05-25 17:59:08 浏览数 (1)

方法介绍:

代码语言:javascript复制
    * There are a few FTPClient methods that do not complete the
    * entire sequence of FTP commands to complete a transaction.  These
    * commands require some action by the programmer after the reception
    * of a positive intermediate command.  After the programmer's code
    * completes its actions, it must call this method to receive
    * the completion reply from the server and verify the success of the
    * entire transaction.
   public boolean completePendingCommad() throws IOException;
   {
        return FTPReply.isPositiveCompletion(getReply());
   }

方法介绍中未说明,在何种情况下应该使用该方法。但是跟踪代码可以发现 这是一个同步阻塞方法,如果调用错误,会导致程序卡住假死在这里。

代码语言:javascript复制
卡住代码
 String line = _controlInput_.readLine();

何时调用?

其实ftp功能,总结来说,只有上传和下载。只有在获取返回流时,才需要调用completePendingCommad方法,因为返回流不是立刻处理的。所以需用手动调用结束方法。

代码语言:javascript复制
public boolean storeFile(String remote, InputStream local)
public OutputStream storeFileStream(String remote)

public boolean retrieveFile(String remote, OutputStream local)
public InputStream retrieveFileStream(String remote)

我们看到上面4个人方法,其中两个有流返回,另外两个无返回。当调用有返回流方法时,需要手动调用completePendingCommad方法,即第二个和第四个是需要调用completePendingCommad方法,其他两个方法如果调用了,则会产生卡死超时现象。

注意事项

不可多加或者漏加,否则会导致程序卡死

0 人点赞