如何使用反应式扩展同时读取交错文件

2024-05-28

我是反应式扩展的新手,我想使用它(在 c# 中)来读取包含多个交错流的文件。基本上文件的格式是ABCDABCDABCD...。我更喜欢按顺序读取文件并分离流(即AAA.., BBB..等)并并行处理每个流,为每个流使用单独的线程。

必须有某种形式的缓冲来确保每个流可以尽可能保持忙碌(当然在限制范围内)。并非所有流都必须同时开始,在这种情况下,必须为延迟的流跳过许多元素。在这种情况下,缓冲可能会弥补这一差距。

文件中的元素很小(4 个字节),因此内容相当丰富。因此,我也在寻找一种有效的方法来处理这个问题。

我首先创建一个可枚举来读取文件。这可以提供一个包含流 ID 的结构,或者可以根据顺序(元素号对流数取模)来分隔流。不过后者可能更有效。


这个问题到处都是“这取决于”,特别是当你谈论性能和效率但提供了一个有点做作的例子时。也就是说,与真实文件相比,您的示例文件非常简单。不过,如果有用的话,我会尝试提供一些建议。

这是将流转换为流的方法Enumerable<char>。流将应用缓冲,这将一次发送一个结果。这可以提高效率(发送回数据块),但在某些时候您需要一次处理一个数据块,它也可能在这里。不要过早优化。

IEnumerable<char> ReadBytes(Stream stream)
{
    using (StreamReader reader = new StreamReader(stream))
    {
        while (!reader.EndOfStream)
            yield return (char)reader.Read();
    }
}

现在,假设这是“输出”可观察量的处理代码。首先,我设置输出可观察量,然后根据需要订阅它们。请注意,我在这里使用数组,因此我的输出可观察索引是数组索引。如果流索引无法转换为从零开始的索引,也可以使用字典。

var outputs = Enumerable.Repeat(0, 3).Select(_ => new Subject<char>()).ToArray();                                                                                                     

outputs[0].Delay(TimeSpan.FromSeconds(2)).Subscribe(x => Console.WriteLine("hi: {0}", x));
outputs[1].Delay(TimeSpan.FromSeconds(1)).Subscribe(x => Console.WriteLine("ho: {0}", x));
outputs[2].Subscribe(x => Console.WriteLine("he: {0}", x));

注意使用Subject<char>发送我的元素。这取决于元素的类型,但是char在给出的示例中有效。另请注意,我延迟元素只是为了证明一切正常。它们现在是独立的流,您可以对它们做任何您想做的事情。

好的,给定一个文件流:

var file = @"C:\test.txt";
var buffer = 32;
var stream = new FileStream(file, FileMode.Open, FileAccess.Read, FileShare.Read, buffer);

我现在可以订阅并使用模索引发送到正确的输出流:

ReadBytes(stream)
.ToObservable(Scheduler.ThreadPool)
.Select((x,i) => new { Key = (i % 3), Value = x }) // you can change it up here
.Subscribe(x => outputs[x.Key].OnNext(x.Value));

这里可能有更有效的方法,具体取决于您如何计算目标流,但想法保持不变。

输入文件仅包含一行:ABCABCABCABCABCABC

运行程序的输出是:

he: C
he: C
he: C
he: C
he: C
he: C

一秒钟后:

ho: B
ho: B
ho: B
ho: B
ho: B
ho: B

然后又一秒钟:

hi: A
hi: A
hi: A
hi: A
hi: A
hi: A
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用反应式扩展同时读取交错文件 的相关文章

  • 如何在 Multiline 属性设置为 true 的文本框中将空格替换为换行符?

    假设我有这个字符串 string str The quick brown fox jumps over the lazy dog 如何替换或忽略字符串中的空格并在多行文本框中输入每个单词 预期输出 The quick brown fox j
  • C++ 局部变量销毁顺序

    C 11 中是否存在局部变量释放的定义顺序 更简洁地说 同一作用域中两个局部变量的析构函数的副作用将以什么顺序变得可见 e g struct X X do something int main X x1 X x2 return 0 Is x
  • 即使指定了标头,g++ 也找不到标头

    所以基本上我有一些非常简单的代码 其中包括
  • 无符号长十六进制表示

    include
  • 如何为 IAsyncOperation 指定回调方法

    是否可以指定一个方法完成后调用async手术 平台 C Windows Phone 8 我需要实现非阻塞方法来异步发送UDP数据包 他们有我的方法 onWriteComplete int errorCode 操作完成时回调 这是我尝试过的
  • C++ 中的结构填充

    如果我有一个struct在 C 中 有没有办法安全地将其读 写到跨平台 编译器兼容的文件中 因为如果我理解正确的话 每个编译器都会根据目标平台进行不同的 填充 不 那是不可能的 这是因为C 在二进制层面缺乏标准化 Don Box http
  • iText7 RegexBasedLocationExtractionStrategy 如何获取找到的文本的字体名和字体大小

    我尝试在 C 上使用 iText7 进行文本替换 我只能使用 RegexBasedLocationExtractionStrategy 获取搜索文本的内容和矩形 并且我想获取文本的字体和大小 有什么建议么 谢谢 你可以实施IText提取策略
  • 网页上的富文本编辑器

    我正在尝试在我的网页中添加一个富文本编辑器 用户可以在其中撰写评论并格式化他们所写的内容 类似于我们在此网站上撰写帖子的编辑器 谁能指出我关于此的正确方向 任何可以帮助我构建这样一个组件的教程 我还想要一个免费的产品 忘记之前提到 类似的东
  • .NET 中的字符串格式:将整数转换为固定宽度字符串?

    我在 NET C 中有一个 int 我想将其转换为特定格式的字符串 如果值为 1 我希望字符串为 001 10 010 116 116 etc 我正在寻找字符串格式 但到目前为止没有成功 我的值也不会超过 999 最简单的方法是使用 NET
  • 传递给 WCF 服务的可选查询字符串参数

    我想知道如何使用 string limit WebOperationContext Current IncomingRequest UriTemplateMatch QueryParameters Limit 在我的wcf中这个方法 Cit
  • 如何使用 Dictionary 属性序列化对象?

    在下面的示例代码中 我得到了这个error 元素 TestSerializeDictionary123 Customer CustomProperties 呕吐型 System Collections Generic Dictionary
  • MVC - 从视图调用控制器

    我是 MVC 新手 我正在使用 MVC 开发一个 Web 应用程序 该应用程序仅包含一个页面 所以在这个视图中我必须填充多个数据 假设应用程序是 新闻提要 应用程序 我需要填充最近的新闻 您喜欢的新闻 您朋友推荐的新闻等 那么我应该从视图到
  • 如何在C++中动态调用函数

    除了 boost Bind Function 之外 我如何在 C 中动态调用函数 PHP has obj new MyObject function doSomething obj gt function Objective C 有 MyO
  • .NET Compact Framework 上的 DateTime.Now 中的毫秒始终为零?

    我想要一个时间戳对于日志Windows 移动项目 精度必须至少在一百毫秒范围内 然而我打电话给DateTime Now返回一个DateTime对象与Millisecond属性设置为零 还有Ticks属性相应地进行四舍五入 如何获得更好的时间
  • 我使用 difftime 的 c 函数有时会返回 65535

    我有一个函数 使用 difftime 来检测自通信心跳停止以来的时间 以秒为单位 该函数的运行速度可以达到每 50 毫秒一次 该函数似乎可以工作 除了偶尔返回 65535 之外 我可以将执行次数减少到每秒一次 因为 difftime 的返回
  • 着色器可以旋转形状以面向相机吗?

    我制作了一个球出现在 3D 空间中的场景 三角球耗费大量资源 所以我使用带有球纹理的二维表面 四边形 来完成此操作 但现在我需要在每次相机移动时调整形状的方向 我使用位置变换和 LookAt 方法来完成此操作 问题是我可以优化这个吗 如果可
  • 在 Outlook 中检索当前电子邮件正文

    在我的 Outlook 插件中 我想在功能区上添加一个按钮 因此当用户单击此按钮时 我想检索当前选定的电子邮件的正文 我有此代码 但它只检索收件箱中的第一封电子邮件 因为索引为 1 Microsoft Office Interop Outl
  • Xamarin - iOS 地图上的多个多边形

    我目前正在关注this https developer xamarin com guides xamarin forms application fundamentals custom renderer map polygon map ov
  • 定义应保存 user.config 文件的自定义路径?

    如果我重命名我编译的应用程序 例如myapp exe to app exe然后 当我运行重命名的可执行文件时 会在此路径中生成新的用户设置文件夹 C Users User AppData Local CompanyName Executab
  • 使用 CRTP 模式时继承中的不明确方法

    我正在定义一个DoubleWrapper类继承自两个 CRTP 基类 Ratioable and Divable 两者都定义operator 具有不同的签名 T operator double const scalar const retu

随机推荐

  • setuptools 并将选项传递给依赖项

    我正在尝试为 pypi 打包一个模块 并且我将 Mercurial 作为依赖项之一 目标计算机可能有也可能没有构建工具 因此我想使用 pure 选项安装 Mercurial 但我找不到指示 setup py 以指定方式安装依赖项的方法 除了
  • 预增量没有按我的预期工作

    我正在尝试通过在线解决一些问题来学习动态规划 我遇到的一个问题需要处理以下输入 4 10 3 4 4 5 6 7 5 7 第一个指向项目数量 第二个指向总容量 其余四个 成对 现在应该指向价值和容量 我遇到的问题是解析它的代码 includ
  • 如何在 Fluent NHibernate ClassMap 类中指定表名?

    我是 NHibernate 的新手 正在尝试使用 Fluent 进行映射 我的实体类名称与它必须映射到的数据库表名称不同 我正在使用派生的映射类ClassMap lt gt 但我无法指定表名 属性TableName from ClassMa
  • jQuery 验证在 IE7 + IE8 中不起作用

    我正在尝试使用jQuery 验证 http bassistance de jquery plugins jquery plugin validation 我网站上的表单上的插件 该表单适用于 FF Chrome Opera 和 Safari
  • 使用 JavaScript 获取图像的一部分

    是否可以显示图像的任何部分img通过 JavaScript 标记 带有像素 我将准备一个大图像 例如 32x320 像素 并定义起始位置 X Y 例如 0 32 和宽度 高度 例如 32 32 并且希望脚本显示第二个 32x32 像素 部分
  • 如何编辑范围? // Google Classroom 控制 Google Apps 脚本中学生访问的权限范围

    我是一名高中老师 正在针对 Google Classroom 编写 Google Apps 脚本 我想创建一个类似于学生成绩视图的电子表格 我的学生可以使用他们的凭据进行访问 我已经成功编写了代码 这样我就可以通过在代码中显式放置学生的 I
  • java中的语音识别

    我想在我的项目中使用语音识别 我找到了这段代码 但是当我运行它时 我收到一个错误 run java lang NullPointerException at newpackage HelloWorld main HelloWorld jav
  • GSON 预期为 BEGIN_ARRAY,但在第 1 行错误为 STRING

    我正在尝试使用 Retrofit 和 GSON 解析从 API 返回的字符串数组 响应通常如下所示 案例 1 Scan finished scan information embedded in this object https www
  • 在 JavaScript 中对 HTML 实体进行编码

    我正在使用允许用户输入内容的 CMS 问题是当他们添加符号时 它可能无法在所有浏览器中正常显示 我想设置一个必须搜索的符号列表 然后转换为相应的 html 实体 例如 gt reg gt amp gt copy gt trade 转换后 需
  • 用笑话测试实现react-leaflet映射的react组件的问题

    当我尝试测试实现react leaflet库的react组件时 遇到以下问题 C digital booking ui node modules react leaflet lib index js 1 Object
  • 如何在没有部署 K8S 的情况下重启 pod?

    我部署了一个弹性搜索 https www elastic co elasticsearch使用此命令在 K8S 上集群helm install elasticsearch elastic elasticsearch 我可以看到 Pod 正在
  • 用于时间线数据的类似 gnuplot 的程序

    我正在寻找一个类似 gnuplot用于在时间轴中绘制数据图表的程序 类似 gnuplot 在 Linux 上运行 命令行功能 GUI 对我帮助不大 可编写脚本的语法 输出为 jpg png svg 或 gif 输出应该是这样的 set5 s
  • UIView表面自定义变换/动画(如“水滴效果”)

    实施方式是什么自定义转换 动画 在视图表面 类似于所附图片 not只是视图边界 问题主要在于一般的方法是什么做到这一点 不完全是 水滴效应 但任何例子肯定会受到赞赏 我想 这是层布局 网格 的某种 算法 转换 但不确定以哪种方式 挖掘 它
  • 使用 Netbeans 7.0.1、Maven 在 JSF2 中打包复合组件

    我在 Internet 上阅读了很多有关将 JSF2 复合组件打包到 JAR 文件中的内容 有人知道我在哪里可以找到 JAR 的结构 规格 官 方文档等 有没有办法使用 Netbeans IDE 来做到这一点 或者 Maven 是否存在原型
  • 这是 unsafeCoerce 的安全使用吗?

    我遇到的情况是 我目前正在使用极其可怕的函数 unsafeCoerce 幸运的是 这并不是为了任何重要的事情 但我想知道这是否是该函数的安全使用 或者是否有其他方法可以解决其他人知道的这个特定问题 我的代码类似于以下内容 data Toke
  • Java 使用函子连接集合

    给定 2 个具有相同数量元素的集合 例如List
  • 谷歌 reCaptcha 与 Laravel

    我正在尝试在没有任何软件包的情况下使用 Laravel 8 安装 Google reCaptcha v2 我正在尝试遵循this https laravelarticle com laravel google recaptcha integ
  • 在 JavaScript 中创建自定义回调

    我需要做的就是在当前函数执行结束时执行回调函数 function LoadData alert The data has been loaded Call my callback with parameters For example ca
  • 如何将 C# 与 AIR 结合使用?

    我在制作 Flex 网站方面有一些基本经验 但我认为 Flex 在制作桌面 AIR 应用程序方面更有用 无论如何 我想知道是否至少可以将 C 与 Actionscript AIR 一起使用 我找不到任何这方面的例子 另外 我可以在 Flex
  • 如何使用反应式扩展同时读取交错文件

    我是反应式扩展的新手 我想使用它 在 c 中 来读取包含多个交错流的文件 基本上文件的格式是ABCDABCDABCD 我更喜欢按顺序读取文件并分离流 即AAA BBB 等 并并行处理每个流 为每个流使用单独的线程 必须有某种形式的缓冲来确保