【问题标题】:Optimising file download优化文件下载
【发布时间】:2011-11-02 16:06:42
【问题描述】:

所以我有以下从 Amazon S3 下载文件的方法,现在它正在工作,但我预计将来我将不得不处理相当大的文件 - 2-3 GB。那么您会推荐哪些性能优化呢?此外,有关 java 中文件 I/O 的一些一般想法的链接不仅适用于我的情况,而且通常适用于我,将不胜感激。

public static void fetchFileFromS3(String filePath, String outPath) {
    int size = 5 * 1024 * 1024; //use 5 megabytes buffers
    byte bufSize[] = new byte[size];  
    FileOutputStream fout = null;
    BufferedOutputStream bufOut = null;
    BufferedInputStream bufIn = null;
    String[] result = getRealPath(filePath);
    S3Object object = Utilities.getS3Instance().getObject(new GetObjectRequest(result[0], result[1]));

    try {
        fout = new FileOutputStream(outPath);
        bufOut = new BufferedOutputStream(fout, size);
        bufIn = new BufferedInputStream(object.getObjectContent(), size);
        int bytesRead = 0;
        while((bytesRead = bufIn.read(bufSize)) != -1) {

            bufOut.write(bufSize, 0, bytesRead);


        }

        System.out.println("Finished downloading file");

        bufOut.flush();
        bufOut.close();
        bufIn.close();

    } catch (IOException ex) {
        Logger.getLogger(Utilities.class.getName()).log(Level.SEVERE, null, ex);
    }
}

【问题讨论】:

  • 你知道下载速度还是磁盘速度会是瓶颈吗?在许多情况下,后者的问题远没有前者那么严重,因此无需做太多事情,而是获得更多带宽。
  • 好吧,因为链路是 10GE 并且磁盘是一个巨大的磁盘阵列,这两者都不是瓶颈,至少在没有争用的情况下是这样。在这种情况下,我更好奇不要在我的代码中引入瓶颈。

标签: java performance file-io amazon-s3 download


【解决方案1】:

我认为研究新的 Java NIO API 是有意义的,尽管对于 whether they're more efficient in large files 存在一些分歧。

例如,在this question 的回答中,使用 NIO 的分块内存映射似乎可以解决问题。

【讨论】:

    猜你喜欢
    • 2012-07-24
    • 2019-05-21
    • 2020-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-28
    • 1970-01-01
    相关资源
    最近更新 更多