我想以指定大小的块读取 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 个字节?