有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java代码的性能下载非常慢

我写了一些代码,从文本文件中读取下载链接,并使用apaches commons io库中的CopyUrltFile方法下载视频,当我在wlan中使用im时,下载速度非常慢。 当我把一个互联网棒是大约6倍快,虽然棒得到4mbit和我的无线局域网是8Mbit。 我也试着在没有commons io库的情况下实现,但问题是一样的。 通常情况下,我会在wlan中以600-700 kb/s的速度下载,但使用java时,下载速度仅为50 kb/s左右。使用internet时,下载速度约为300 kb/s。 你知道问题出在哪里吗

提前谢谢

//编辑:这是代码,但我不认为这与此有关,你对网络it政策是什么意思

FileInputStream fstream = new FileInputStream(linksFile);
    DataInputStream in = new DataInputStream(fstream);
    BufferedReader br = new BufferedReader(new InputStreamReader(in));

    String link;
    String name;

    while ((link = br.readLine()) != null) {
        name = br.readLine();
        FileUtils.copyURLToFile(new URL(link), new File("videos/"+name+".flv"));;
        System.out.println(link);
    }

共 (2) 个答案

  1. # 1 楼答案

    菲律蒂尔斯。copyURLToFile内部使用缓冲区进行读取。 增加缓冲区的值可以加快下载速度,但这似乎是不可能的

  2. # 2 楼答案

    这不太可能是Java问题

    您发布的代码实际上没有在网络上执行任何IO操作——它只是确定一个URL并将其传递给(可能是Apache Commons')FileUtils.copyURLToFile。与流行的第三方库一样,如果该方法中有一个bug,导致除了最不寻常的情况之外的所有情况下的吞吐量都很慢,那么它应该已经被识别(并有望修复)

    因此,问题将在别处解决。通过正常的HTTP方法(例如在浏览器中)访问资源时,您是否获得了预期的速度?如果不是,那么在操作系统层面上就存在一个普遍的问题。否则,我会看看你们网络上的政策

    两个可能的原因浮现在脑海中:

    • 显而易见的一点是某种流量塑造——你的网络会降低来自Java应用程序的数据包的优先级(出于潜在的任意原因)。您需要查看hwo的配置,并查看其日志,以了解情况是否如此
    • 问题在于DNS。如果Java使用的主服务器要么被阻塞,要么速度非常慢,那么将URL转换为IP地址并开始实际传输可能需要几秒钟的时间。我曾经遇到过一个类似的问题,当时一个防火墙正在悄悄地将数据包丢弃到一台服务器上,这需要三秒钟(每次查找!)让Java进程切换到辅助服务器

    在任何情况下,几乎可以肯定的是,这不是Java代码的错