【发布时间】: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