首页 > 解决方案 > 如何从 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 个字节?

标签: javagoogle-cloud-platformgoogle-cloud-storagejava-nio

解决方案


推荐阅读