当前位置: 首页 > 面试题库 >

为什么在Java 7中ftp上传缓慢

符修杰
2023-03-14
问题内容

我想问问是否有人知道FTP存在Java 7问题吗?我已经使用了Sun Net和Apache Commons Net库,并且都在Java
6上达到了预期的效果。但是,当我将开发环境(Eclipse)切换到1.7时,相同的操作的执行速度非常慢(大约4.5至8KB /
s),这些是本地主机服务器和局域网内的另一台服务器。

我尝试了缓冲流,字节到字节的传输,关闭Nagle算法,并使用了Apache便捷方法storeFile(),后者最终在加速localhost上表现出色,但再次降低了对远程服务器的爬网速度。我还设置了所有计算机以关闭状态FTP过滤。

    InputStream is = null;
    OutputStream os = null;
    try {
        is = new BufferedInputStream(prepareInputStream(data));
        os = new BufferedOutputStream(prepareOutputStream(data));
        if (is == null || os == null) {
            log.error("Can't build connection");
            return;
        }

        byte[] buf = new byte[4096];
        int c = 1;

        while (c > 0) {
            c = is.read(buf);
            if (c > 0)
            os.write(buf, 0, c);
            data.incrCurrentPosition();
            fireStateChanged(data);
        }
        data.incrCurrentPosition();
    } catch (IOException e) {
        log.error(e.getMessage(), e);
        setEnabled(false);  
    } catch (Exception e) {
        log.error(e.getMessage(), e);
    } finally {
        if (is != null) {
            try {
                is.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        if (os != null) {
            try {
                os.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

可以看出,这是相当标准的实现代码。同样,在Java 6中,事情很快就解决了。在Java 7中,对于Sun和Apache
Commons库,它的速度降低了10到20倍。使用FileZilla这样的FTP客户端可以确认FTP正常运行,因此我认为它确实与Java
7有关。我会尽一切可能在网上挖到任何有关问题的信息,但是,大多数情况下,我所看到的都是关于Java 7和Windows 7防火墙冲突。

在此先感谢您提供任何见解。


问题答案:

请检查您当前的缓冲区大小是多少:

ftpClient.getBufferSize();

如果尚未将其设置为其他值,则该值为零(0)。因此,将其设置为更高的值:

ftpClient.setBufferSize(1048576);//1024*1024

您可以像以前一样检查其当前值:

ftpClient.getBufferSize();

顺便说一下,接受的答案 setBufferSize(0) 对我不起作用。我使用的是Apache
Commons的最新版本,因此该解决方案可能适用于早期版本。如果将缓冲区大小设置为零,则当前版本将保持不变。



 类似资料:
  • 我想将文件从一台服务器上传到另一台FTP服务器,以下是我的上传文件代码,但它抛出错误为: 远程服务器返回错误:(550)文件不可用(例如,找不到文件,无法访问)。 这是我的代码: 你能告诉我哪里出了问题吗?

  • 问题内容: 设置INTERNET_ACCESS等后,出现此错误。 这是我测试过的代码的另一部分,仍然收到该异常 } 问题答案: “ftp.194.90.81.149”: No address associated with hostname 您收到UnknownHostException的事实意味着ftp.194.90.81.149在DNS中不是真实的主机名。我怀疑其中的数字部分是您真正想要的。即

  • 问题内容: 我知道在该主题上也有类似的帖子,但是它们并没有完全解决我的问题。当您这样做时: (显然)大多数时间都会打印,因为以某种方式缓存了[-128,127]范围内的整数。但: 会回来的。我知道我正在请求一个Integer的新实例,但是由于装箱的原语在Java中是不可变的,并且已经有了执行“正确的事情”的机制(如第一种情况所示),为什么会发生这种情况? 如果Integer的所有实例(具有10)都

  • 问题内容: 是因为我们应该加载类(例如),创建实例,然后搜索适当的方法,打包参数,然后仅调用方法?因此,大多数时间都花在了这些操作上,而不是花在对象上的显式方法调用上,对吧? 问题答案: 使用反射时,每次执行时都需要验证您执行的每个步骤。例如,当您调用一个方法时,它需要检查目标是否实际上是该方法的声明者的实例,是否具有正确数量的参数,每个参数是否具有正确的类型,等等。 绝对没有内联或其他性能技巧的

  • 本文向大家介绍Python ftp上传文件,包括了Python ftp上传文件的使用技巧和注意事项,需要的朋友参考一下 以下代码比较简单,对python实现ftp上传文件相关知识感兴趣的朋友可以参考下 下面给大家介绍python实现ftp上传下载文件的方法 python本身自带一个FTP模块,可以实现上传下载的函数功能。

  • 将照片批量上传ftp服务器。 [Code4App.com]