【发布时间】:2021-08-05 16:12:52
【问题描述】:
我正在尝试使用他们的Java SDK 从Google Cloud Storage 下载一个字节范围。
我可以像这样下载整个文件。
Storage mStorage; // initialized and working
Blob blob = mStorage.get(pBucketName, pSource);
try (ReadChannel reader = mStorage.reader(blob.getBlobId())) {
// read bytes from read channel
}
如果我愿意,我可以ReadChannel#seek(long) 直到达到所需的起始字节,然后从该点下载一个范围,但这似乎效率低下(尽管我不知道具体在实现中发生了什么。)
理想情况下,我想将Range: bytes=start-end 标头指定为shown in the Google Cloud Storage REST API,但我不知道如何在Java 中设置标头。
如何在 Java SDK Storage 的 get 调用中指定字节范围,或者指定标头,以便高效下载所需的字节范围?
【问题讨论】:
-
使用 NIO 接口你可以在你的文件中获取一个 SeekableChannel,然后调用 position 方法来获取你想要读取的位置。这是他们的 Java SDK 的一部分。
-
由于这里没有人可以接受的答案,我添加一个问题:github.com/googleapis/google-cloud-java/issues/7625
-
更新:我跟踪 SDK 代码并发布我在答案中找到的内容。
标签: java google-cloud-storage google-cloud-sdk