Оптимизация загрузки файлов - PullRequest
1 голос
/ 24 августа 2011

Итак, у меня есть следующий метод для загрузки файлов из Amazon S3, и пока он работает, но я ожидал, что в будущем мне придется иметь дело со значительно большими файлами - 2-3 гигабайта. Так какую оптимизацию производительности вы бы порекомендовали? Также будут высоко оценены ссылки на некоторые ОБЩИЕ идеи о файловом вводе / выводе в Java, применимые не только к моему случаю, но и вообще.

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 голосов
/ 06 марта 2012

Я думаю, что анализ новых API Java NIO имеет смысл, хотя есть некоторые разногласия по поводу , являются ли они более эффективными в больших файлах .

Например, в ответе на этот вопрос использование чанкованного отображения памяти с NIO выглядит так, как будто это может сработать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...