我正在将一个流复制到另一个流以在最后获得一个完整的流,然后以.wav形式保存流,但是我得到了流的第一部分的内容。
我正在开发具有记录,暂停,停止功能的刻录机。当我按下录制按钮时,我得到一个流并在停止按钮中将此流复制到另一个流,然后我重复这些步骤,当我在一个地方/流合并所有流时,我只获得第一个复制流的内容。
public void CopyInputStreamToOutput(Stream fromStream, MemoryStream destination)
{
int num;
byte[] buffer = new byte[fromStream.Length];
fromStream.Position = 0;
while ((num = fromStream.Read(buffer, 0, buffer.Length)) != 0)
{
destination.Write(buffer, 0, num);
}
}
我需要这个: stream1 + stream2 + stream3 + ... + streamN = finalStream 。如何将一个流附加到另一个流以获得最终流?
这个位置有问题吗?
答案 0 :(得分:0)
我猜这个 - 不是该领域的专家。请将其视为伪代码
public void CopyInputStreamToOutput(Stream fromStream, MemoryStream destination)
{
MemoryStream ms = new MemoryStream();
ms.Write(destination.GetBuffer(), 0, (int)destination.Length);
ms.Write(fromStream.GetBuffer(), 0, (int)fromStream.Length);
destination = ms;
}
击> <击> 撞击>
这是有效的:
public static void CopyInputStreamToOutput(Stream fromStream, ref MemoryStream destination)
{
MemoryStream ms = new MemoryStream();
destination.Position = 0;
destination.CopyTo(ms);
fromStream.Position = 0;
fromStream.CopyTo(ms);
destination = ms;
}
这更好,因为它不会创建额外的副本,但可能需要考虑destination
位置。 CopyTo
个州does not reset the position of the destination stream after the copy operation is complete.
的记录:
public static void CopyInputStreamToOutput(Stream fromStream, ref MemoryStream destination)
{
//MemoryStream ms = new MemoryStream();
//destination.Position = 0;
//destination.CopyTo(ms);
fromStream.Position = 0;
fromStream.CopyTo(destination);
//destination = ms;
}