zoukankan      html  css  js  c++  java
  • FTPClient中使用completePendingCommand方法注意事项

    方法介绍:

        * 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()经常使程序死掉的原因分析以及解决方式



    作者:北海北_6dc3
    链接:https://www.jianshu.com/p/a90cc2aeefca
    来源:简书
    简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。
  • 相关阅读:
    集合
    第五天
    第四天
    第二天
    ieee 期刊缩写(转载)
    JAVA学习笔记03
    JAVA学习笔记2
    JAVA学习笔记01
    Latex 图片排版
    非奇异终端滑模
  • 原文地址:https://www.cnblogs.com/pangguoming/p/10910644.html
Copyright © 2011-2022 走看看