Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 创建新流和使用Write方法有什么区别?_C#_Memorystream - Fatal编程技术网

C# 创建新流和使用Write方法有什么区别?

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

我正在开发一个mp3流媒体应用程序,并在一个点上堆叠。有两个不同的代码部分用于读取
并将其存储在
内存流
中,但其中一个工作不正常

第一种方法:

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
作为参数传递,并在第二个方法中的where
Position
停留后追加缓冲区,得到了相同的
MS
。您真的应该重新阅读。。。如果这没有帮助-检查长度属性。显然,您已经阅读了两个构造函数的MSDN文章,那么为什么您希望它们的行为方式相同?在这两种情况下,我们都有相同的
MemoryStream
包含相同的
bigBuffer
数据,不是吗?我这样认为是因为我们通过在第一个方法中创建新的
MemoryStream
bigBuffer
作为参数传递,并在第二个方法中的where
Position
停留后追加缓冲区,得到了相同的
MS
。您真的应该重新阅读。。。如果这没有帮助-请检查长度属性。