有时,我们需要巨大的文件从一个水桶在AWS S3复制到另一个。 只要有可能,我们使用CopyRequest处理(因为需要返回给客户端没有往返)此操作全部在AWS。 但有时我们没有这样做,因为我们需要它需要2个完全独立的账户之间进行复制的选项GET然后PUT 。
问题:
- 流从GET返回的响应是不可搜索,因此它不能被传递到PUT请求并将它从一个无缝流式传输到其它
- 复制响应流使用CopyTo从()的中介流(MemoryStream的),然后传递一个认沽操作效果很好,但没有规模(大文件会抛出OutOfMemory异常)
所以基本上我需要,我可以读/同时写入到一个中介流,基本上我会从响应流中读取一个数据块,并将其写入我的中介流,同时PUT请求被读出的内容和它只是一个无缝直通那种情景。
我发现计算器这篇文章,它似乎在第一前途的,但它仍然抛出大文件的内存不足异常。
.NET异步流读取/写
任何人都曾经有过做类似这样的东西吗? 你会如何应对呢? 谢谢advcance
目前尚不清楚你为什么会想使用MemoryStream
。 所述Stream.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);
}
}
我发现这一点,但它内部使用一个队列,这是作者的笔记是数量级比一个MemoryStream慢的顺序。
http://www.codeproject.com/Articles/16011/PipeStream-a-Memory-Efficient-and-Thread-Safe-Stre
我一直希望我会找到一个正式MS库解决方案,但似乎这轮没有正确发明出来。