首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >随机访问流Azure块存储

随机访问流Azure块存储
EN

Stack Overflow用户
提问于 2019-04-26 00:37:44
回答 2查看 227关注 0票数 1

有没有办法将流对象直接创建到Azure Blob或Azure Block Storage Blob。

代码语言:javascript
复制
var s = new AzureStream(blockObject)
ms.CopyTo(s);
s.position = 200;
ms.CopyTo(s);
s.Read...

这将允许一些令人惊叹的交互,比如将数据库索引存储在azure blob中,而不需要将它们拉到本地。

EN

回答 2

Stack Overflow用户

发布于 2019-04-26 01:08:20

不确定这是否回答了您的问题,但您可以从blob中读取一定范围的字节。直接使用REST API时,您可以在Rangex-ms-range头部中指定要读取的字节数。

在使用C# SDK时,可以使用DownloadRangeToStream方法,类似于:

代码语言:javascript
复制
        using (var ms = new MemoryStream())
        {
            long offset = 200;
            long bytesToRead = 1024;
            blob.DownloadRangeToStream(ms, offset, bytesToRead);
        }
票数 1
EN

Stack Overflow用户

发布于 2019-04-26 01:38:01

如果你的问题是,“我可以将Streams与Azure blob一起使用吗”,以避免在任何时间点都需要在内存中保存整个blob大小,那么答案绝对是肯定的。

例如,在读取块blobs时,根据此answer here,可以使用CloudBlob.OpenReadAsync等方法将blobs作为流句柄进行访问。默认缓冲区大小为4MB,但可以通过StreamMinimumReadSizeInBytes等属性进行调整。在这里,我们将blob流复制到另一个打开的输出流:

代码语言:javascript
复制
using (var stream = await myBlockBlob.OpenReadAsync(cancellationToken))
{
    await stream.CopyToAsync(outputStream);
}

类似地,您可以直接使用write a stream进入Blob Storage:

代码语言:javascript
复制
 await blockBlob.UploadFromStreamAsync(streamToSave, cancellationToken);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55853989

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档