c# - 联播 .NET 流

标签 c# stream

首先我要明确一点,我指的不是联播 TCP/IP 流,我想获取 c# 流的输出并将其发送到多个目的地。

例如,如果我有一个 FileStream(fs) 和一个 MemoryStream(ms) 以及一个 FtpStream(ftps) 并做了类似的事情

     ...
     SuperStreamWriter ss = new SuperStreamWriter(fs, ms, ftps);
     ss.Write(helloWorld, 0, helloWorld.length);
}
class SuperStreamWriter : Stream
{
    Stream[] _s;
    public SuperStreamWriter(params Stream[] s)
    {
        _s = s;
    }
    public override void Write(byte[] buffer, int offset, int count)
    {
        foreach (Stream s in _s)
        {
            s.Write(buffer, offset, count);
        }
    }
//Other functions cut for example
}

Hello world 将被推送到我的所有三个流中。有谁知道有什么能给我提供与我在缓冲区上使用该 foreach 循环描述的其他功能类似的功能吗?另外,如果 foreach 循环是我唯一/最好的选择,那么按原样对 foreach 循环的每次迭代进行线程化是否安全?

最佳答案

我不知道有什么东西会同时写入多个流,并且在任何情况下都会在某个时候归结为一个循环。

请注意,如果您使用线程实现(从性能角度来看这肯定是有益的),请注意 Stream.BeginWrite 的默认实现是同步 - 派生类必须实现自己的异步逻辑。例如,FileStream 实现了自己的异步行为,但 MemoryStream 没有。

关于c# - 联播 .NET 流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2322442/

相关文章:

c# - 如何解决: The provided anti-forgery token was meant for a different claims-based user than the current user

ubuntu - OBS 流到 Ubuntu 上的 session

node.js - 连接通过请求流和异步处理关闭

c# - 文件上传到文件流

java - 为什么在 Java 中应该避免 IO as Byte

c# - OWIN - 自定义 UserManager

c# - 绘制用户定义的矩形

c# - mysql异常错误整数值: '@column' for column from asp.net web应用程序

c# - 如何防止枚举中的重复值?

node.js - 如何在 node.js 流中与这个 <File> 对象交互?