C# 创建新流和使用Write方法有什么区别?
我正在开发一个mp3流媒体应用程序,并在一个点上堆叠。有两个不同的代码部分用于读取C# 创建新流和使用Write方法有什么区别?,c#,memorystream,C#,Memorystream,我正在开发一个mp3流媒体应用程序,并在一个点上堆叠。有两个不同的代码部分用于读取流并将其存储在内存流中,但其中一个工作不正常 第一种方法: do { bytesRead = responseStream.Read(buffer, 0, buffer.Length); Buffer.BlockCopy(buffer, 0, bigBuffer, total, bytesRead); total += bytesRead; pos = ms.Position; ms = new
流
并将其存储在内存流
中,但其中一个工作不正常
第一种方法:
do
{
bytesRead = responseStream.Read(buffer, 0, buffer.Length);
Buffer.BlockCopy(buffer, 0, bigBuffer, total, bytesRead);
total += bytesRead;
pos = ms.Position;
ms = new MemoryStream(bigBuffer);
ms.Position = pos;
frame = Mp3Frame.LoadFromStream(ms);
}
while (bytesRead > 0)
do
{
bytesRead = responseStream.Read(buffer, 0, buffer.Length);
total += bytesRead;
pos = ms.Position;
ms.Write(buffer, 0, bytesRead);
ms.Position = pos;
frame = Mp3Frame.LoadFromStream(ms);
}
while (bytesRead > 0)
第二种方法:
do
{
bytesRead = responseStream.Read(buffer, 0, buffer.Length);
Buffer.BlockCopy(buffer, 0, bigBuffer, total, bytesRead);
total += bytesRead;
pos = ms.Position;
ms = new MemoryStream(bigBuffer);
ms.Position = pos;
frame = Mp3Frame.LoadFromStream(ms);
}
while (bytesRead > 0)
do
{
bytesRead = responseStream.Read(buffer, 0, buffer.Length);
total += bytesRead;
pos = ms.Position;
ms.Write(buffer, 0, bytesRead);
ms.Position = pos;
frame = Mp3Frame.LoadFromStream(ms);
}
while (bytesRead > 0)
在这些代码中,在处理或更改MemoryStream
后,存储并再次设置MemoryStream
的位置。但是第二种方法并不像我预期的那样有效
关键点是
新内存流(字节[]数组)
和内存流.Write(数组,0,计数)
之间的区别。它们的工作方式不同吗?我在想他们是一样的。这个问题的原因是什么?您显然已经阅读了两个构造函数的MSDN文章,那么为什么您希望它们的行为方式相同呢?在这两种情况下,我们都有相同的MemoryStream
包含相同的bigBuffer
数据,不是吗?我这样认为是因为我们通过在第一个方法中创建新的MemoryStream
将bigBuffer
作为参数传递,并在第二个方法中的wherePosition
停留后追加缓冲区,得到了相同的MS
。您真的应该重新阅读。。。如果这没有帮助-检查长度属性。显然,您已经阅读了两个构造函数的MSDN文章,那么为什么您希望它们的行为方式相同?在这两种情况下,我们都有相同的MemoryStream
包含相同的bigBuffer
数据,不是吗?我这样认为是因为我们通过在第一个方法中创建新的MemoryStream
将bigBuffer
作为参数传递,并在第二个方法中的wherePosition
停留后追加缓冲区,得到了相同的MS
。您真的应该重新阅读。。。如果这没有帮助-请检查长度属性。