java - 如何从 GCS Blob 中读取特定范围的字节?
问题描述
我想以指定大小的块读取 GCS blob 的内容。我写了一个测试,我想检索存储为 GCS blob 的 10,000 字节文件的最后 5000 字节。该文件由 1K 个“0”组成,然后是 1K 个“1”,1K 个“2”,...,1K 个“9”。
public void testDownloadBytes(Blob blob) throws IOException {
// 10K file - 1K of 0s, followed by 1K of 1s, 1K of 2s, ...
ReadChannel reader = blob.reader();
ByteBuffer byteBuf = ByteBuffer.allocate(10_000);
reader.seek(5000);
reader.setChunkSize(10_000);
int numRead = reader.read(byteBuf);
logger.info("read '" + numRead + " bytes");
byte[] bytes = byteBuf.array();
String s = new String(bytes, StandardCharsets.UTF_8);
logger.info("downloaded '" + s + "'");
}
因为我从 5000 字节开始,并要求检索 10,000 字节,所以我希望只读取最后 5000 字节。但是,读取的字节数为 10,000。前 5000 个字节是我所期望的,从“5”开始。有趣的部分是最后 5000 个字节由 <CR><LF> 组成,然后是文件的开头- 1K 的“0”,...,998 个“4”。为什么会发生这种情况,我该怎么做才能只检索最后 5000 个字节?
解决方案
推荐阅读
- ios - 如何从json响应中检索数据
- react-native - 如何使用 react-native-elements 在 ListItem 的 leftAvatar 中设置本地目录图像?
- python-3.x - 没有使用 python beautifulsoup 获取包含公司信息的嵌套表
- javascript - JavaScript/HTML - 为选定的单选按钮分配一个值
- java - CDI 生产商未获得资格认证
- php - cakephp3.7 中的 CSRF 令牌不匹配
- java - 从android应用程序成功发送数据后,蓝牙打印机不打印数据
- apache-camel - 使用 Apache Camel 进行单元测试
- docker - Kubernetes 部署填充了错误的持久卷
- java - 面板组件在框架卷起后移动