美文网首页
FTPClient中使用completePendingComma

FTPClient中使用completePendingComma

作者: 北海北_6dc3 | 来源:发表于2019-03-05 13:08 被阅读0次

    方法介绍:

        * 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());
       }
    

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

    卡住代码
     String line = _controlInput_.readLine();
    

    何时调用?

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

    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方法,其他两个方法如果调用了,则会产生卡死超时现象。

    注意事项

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

    参考链接

    commons-net FTPClient API存取设计

    Commons-net FTPClient completePendingCommand()经常使程序死掉的原因分析以及解决方式

    【特此声明:本文原创,禁止转载!觉得有用打赏一个吧】

    相关文章

      网友评论

          本文标题:FTPClient中使用completePendingComma

          本文链接:https://www.haomeiwen.com/subject/icmnuqtx.html