我经常遇到使用gzip格式的s3存储桶中的大文件。这些基本上是gzip格式的文本文件,所以我想下载一个部分文件(让我们说几百行)。
我在 s3cmd 中找不到任何选项,这样我就可以下载部分文件,即使它是一个没有任何压缩的纯文本文件。
以下是我现在所拥有的java代码,它再次下载完整的文件,我还应该在这里下载一个gzip格式的部分文件。
String outPutFile = 'mylocalfile.txt';
File file = new File(outPutFile);
S3Object s3object = s3Client.getObject(new GetObjectRequest(bucketName, key));
InputStream reader = new BufferedInputStream(s3object.getObjectContent());
OutputStream writer = new BufferedOutputStream(new FileOutputStream(file));
int read = -1;
while ((read = reader.read()) != -1) {
writer.write(read);
}
答案 0 :(得分:0)
GZIPInputStream reading line by line帮助我解决了我的问题。所以最后这就是我所拥有的。
int numOfLinesRead = 0;
String outPutFile = 'mylocalfile.txt';
FileWriter writer = new FileWriter(outPutFile);
S3Object s3object = s3Client.getObject(new GetObjectRequest(bucketName, key));
InputStream fileStream = new BufferedInputStream(s3object.getObjectContent());
gzipStream = new GZIPInputStream(fileStream);
decoder = new InputStreamReader(gzipStream, "UTF-8");
BufferedReader buffered = new BufferedReader(decoder);
while ((thisLine = buffered.readLine()) != null && numOfLinesRead < numOfLinesToRead) {
writer.write(thisLine+'\n');
numOfLinesRead++;
}