java - 优化文件下载

标签 java performance file-io amazon-s3 download

所以我有以下从 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);
    }
}

最佳答案

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

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

关于java - 优化文件下载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7173646/

相关文章:

java - 子包的spring aop表达式

java - 在 Android 中获取电池电量和状态

java - 如何获取 JDK 7 和 JDK 8 中的次要和主要垃圾收集计数

java - lejos 文件写入 NXT

C++ 基本文件 i/o,读取失败

java - 锁定 map Activity

java - QueryDSL:将 BooleanExpression 列表转换为 Predicate

.net - 比 MS Access 2007 更快的东西,快速可移植数据库推荐?

c - 如何在单线程服务器上处理多个客户端(使用套接字)

file - 读取JLD文件