java - BufferedReader 无法读取 Google Cloud Storage ReadChannel 上的所有行
问题描述
我正在下载一个 Google Cloud Storage 对象(一个大小约为 400MB、2500 万行记录的 GZIP 文件),代码如下:
Blob blob = storage.get(bucketName, blobName);
ReadChannel readChannel = blob.reader();
ReadChannel 被 gunzip 并通过以下方式传递给 BufferedReader:
BufferedReader reader =
new BufferedReader(
new InputStreamReader(
new GZIPInputStream(
Channels.newInputStream(readChannel)),
UTF_8));
问题:
BufferedReader 只会一直读取到 10110000 行(2500 万行中)(尝试 10 次以上)。
额外信息:
谷歌 ReadChannel 仍然是 endOfStream=false 。但是 BufferedReader 的 InputStreamReader 有 endOfFile=true。
我可以使用以下命令从完全相同的 ReadChannel 读取完整行(2500 万行):
InputStream inputStream = Channels.newInputStream(readChannel);
ByteArrayOutputStream outputStream = new ByteArrayOutputStream(500 * 1024 * 1024);
IOUtils.copy(inputStream, outputStream);
byte[] gzipFileBytes = outputStream.toByteArray();
BufferedReader reader =
new BufferedReader(
new InputStreamReader(
new GZIPInputStream(
new ByteArrayInputStream(gzipFileBytes)),
UTF_8));
非常感谢您的帮助。
解决方案
推荐阅读
- python - Discord bot 无法播放 youtube 视频超过 ~60 秒
- javascript - 如何在javascript计算后在表单输入上摆脱弹出“请选择一个有效值。两个最接近的有效值是......”?
- flutter - 在 Dart 中定义具有 2 种可选类型的道具
- node.js - 'npm' 不是内部或外部命令、可运行程序或批处理文件。但是运行 npm.cmd 有效
- jquery - Laravel 7通过json将值从ajax导出到刀片到for循环
- javascript - Anti-Offensive Word 命令垃圾邮件日志
- string - VBS中每个字符后加一个空格
- c# - 无法在 Visual Studio C# 上运行 Microsoft.FlightSimulator.SimConnect.dll
- c - 如何使用c将结构中的数据放入文本文件?
- python - Beautifulsoup 访问嵌套的 HTML 标签