gpt4 book ai didi

c# - 异步读取/写入同一流?

转载 作者:太空狗 更新时间:2023-10-30 00:54:41 25 4
gpt4 key购买 nike

有时我们需要将大文件从一个存储桶复制到 AWS S3 中的另一个存储桶。只要有可能,我们就使用 CopyRequest 来处理所有在 AWS 上的操作(因为不需要往返客户端)。但有时我们没有这样做的选择,因为我们需要在 2 个完全独立的帐户之间进行复制,这需要 GET。然后是 PUT .

问题:

  1. 从 GET 返回的响应流是不可搜索的,因此它不能传递给 PUT 请求并让它从一个请求无缝地流到另一个
  2. 使用 CopyTo() 将响应流复制到中间流 (MemoryStream),然后将其传递给 PUT 操作效果很好,但无法扩展(大文件会引发 OutOfMemory 异常)

所以基本上我需要一个我可以同时读取/写入的中间流,基本上我会从响应流中读取一个 block 并将其写入我的中间流,同时 PUT 请求正在读取内容和它只是一种无缝直通的场景。

我在 stackoverflow 上找到了这篇文章,起初看起来很有希望,但它仍然会抛出大文件的 OutOfMemory 异常。

.NET Asynchronous stream read/write

有没有人曾经做过类似的事情?你会如何处理它?提前致谢

最佳答案

不清楚为什么要使用 MemoryStreamStream.CopyTo .NET 4 中的方法不需要使用中间流 - 它只会读入固定大小的本地缓冲区,然后将该缓冲区写入输出流,然后读取更多数据(覆盖缓冲区)等。

如果您不使用 .NET 4,则很容易实现类似的东西,例如

public static void CopyTo(this Stream input, Stream output)
{
byte[] buffer = new byte[64 * 1024]; // 64K buffer
int bytesRead;
while ((bytesRead = input.Read(buffer, 0, buffer.Length)) > 0)
{
output.Write(buffer, 0, bytesRead);
}
}

关于c# - 异步读取/写入同一流?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12008561/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com