优化文件下载

时间:2011-08-24 10:05:34

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

所以我有以下方法从Amazon S3下载文件,现在它正在工作,但我预计在未来我将不得不处理相当大的文件 - 2-3千兆字节。那么你会推荐什么性能优化?此外,关于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);
    }
}

1 个答案:

答案 0 :(得分:0)

我认为研究新的Java NIO API是有道理的,即使对whether they're more efficient in large files存在一些分歧。

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