如何解决如何确保在 S3Object 中读取所有行/记录
我写了一个从 S3 对象读取信息的方法。 S3Object 中有多个记录,读取所有行的最佳方法是什么。它是否只读取对象的第一行?如何确保读取所有行?任何人都可以提供一些建议吗?
while ((line = reader.readLine()) != null) {
map = objectMapper.readValue(line,new TypeReference<Map<String,Object>>() {});
public Map<String,Object> readS3ObjectData(@NonNull S3Object s3Object) throws IOException {
S3ObjectInputStream s3InputStream = s3Object.getObjectContent();
BufferedReader reader = new BufferedReader(new InputStreamReader(s3InputStream,StandardCharsets.UTF_8));
String line = "";
Map<String,Object> map = new HashMap<>();
while ((line = reader.readLine()) != null) {
map = objectMapper.readValue(line,Object>>() {});
LOGGER.info("Create Object mapper successfully");
}
reader.close();
s3InputStream.close();
return map;
}
解决方法
我写了一个从 S3 对象读取信息的方法。
我觉得不错1。
S3Object 中有多个记录,读取所有行的最佳方法是什么。
您的代码应该读取所有行。
它是否只读取对象的第一行?
没有。它应该读取所有的行2。该 AX
循环一直读取直到 while
返回 readLine()
,而且只有在您到达流的末尾时才会发生这种情况。
如何确保所有行都被读取?
如果您得到的行数比预期的少,要么是 S3 对象包含的行数比您想象的少,要么是某些原因导致对象流过早关闭。
对于前者,在阅读时计算行数,并将其与预期的行数进行比较。
后者可能是由于读取非常大的文件时超时。有关如何处理该问题的一些想法,请参阅 How to read file chunk by chunk from S3 using aws-java-sdk。
1 - 实际上,如果您使用 try with resources 来确保 S3 流始终关闭会更好。但这不会导致您“丢失”线路。
2 - 这假设 S3 服务不会使连接超时,并且您没有请求 URI 请求参数中的一部分(块)或范围;见https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObject.html。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。