问题标签 [buffering]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
6 回答
29674 浏览

android - Android - 如何判断 MediaPlayer 何时缓冲

我必须在这里遗漏一些明显的东西,但我似乎找不到任何东西可以让我确定 MediaPlayer 何时缓冲音频。我正在流式传输互联网音频,我想显示一个缓冲指示器,但我尝试过的任何方法都无法让我知道 MediaPlayer 何时中断音频以进行缓冲,因此我无法正确显示缓冲指示器。有什么线索吗?

0 投票
0 回答
282 浏览

wcf - 将大型或复杂对象从 WCF 服务器发送到客户端

我的应用程序是近乎实时的数据缓冲应用程序。

我正在使用网络。用于发送复杂对象的 TCP 绑定。

通过不同的回调函数向客户端缓冲数据。

尽管我启用了某些事件,但应用程序会减慢并转换为非实时的。

任何人都可以帮助以最佳方式将实时数据缓冲到 WCF 中具有大型复杂对象的多个客户端???

0 投票
1 回答
2484 浏览

c# - Rx IObservable 缓冲以消除突发事件

我有一个 Observable 序列,它以快速爆发的方式产生事件(即:五个事件一个接一个,然后是长时间的延迟,然后是另一个快速的事件爆发,等等)。我想通过在事件之间插入短暂的延迟来消除这些突发。想象下图作为示例:

Observable.Interval()我目前的方法是在可以从原始流中提取另一个事件时通过该信号生成一个类似节拍器的计时器。问题是我无法弄清楚如何将该计时器与我的原始无缓冲可观察序列结合起来。

IObservable.Zip()接近于做我想做的事,但它只有在原始流比计时器更快地产生事件时才有效。一旦原始流中出现明显的停顿,计时器就会建立一系列不需要的事件,然后立即与原始流中的下一个突发事件配对。

理想情况下,我想要一个具有以下函数签名的 IObservable 扩展方法,它产生我上面概述的行为。现在,来拯救我的 StackOverflow :)

PS。我是 Rx 的新手,所以如果这是一个非常简单的问题,我深表歉意......


1. 简单但有缺陷的方法

这是我最初的天真和简单的解决方案,有很多问题:

第一个明显的问题是内部订阅返回的 IDisposable 丢失了原始源,因此无法终止订阅。在此方法返回的 IDisposable 上调用 Dispose 会终止计时器,但不会终止底层原始事件源,因为它现在不必要地填充队列,没有人可以从队列中提取事件。

第二个问题是异常或流结束通知无法从原始事件流传播到缓冲流 - 在订阅原始源时它们会被简单地忽略。

最后但并非最不重要的一点是,现在我的代码会定期唤醒,无论是否实际上有任何工作要做,在这个美妙的新反应式世界中,我宁愿避免这种情况。


2. 方法过于复杂

为了解决我最初的简单方法中遇到的问题,我编写了一个复杂的函数,其行为很像IObservable.Delay()(我使用 .NET Reflector 来读取该代码并将其用作我的函数的基础)。不幸的是,很多样板逻辑例如AnonymousObservable在 system.reactive 代码之外无法公开访问,所以我不得不复制和粘贴很多代码。该解决方案似乎可行,但鉴于其复杂性,我不太相信它没有错误。

我简直不敢相信没有办法使用标准响应式扩展的某种组合来实现这一点。我讨厌我在不必要地重新发明轮子的感觉,而我正在尝试构建的模式似乎是一个相当标准的模式。

0 投票
2 回答
1662 浏览

c - 如何从程序中禁用 xterm 中输入的行缓冲?

即,如何让击键直接发送到我的程序,而无需等待用户按下回车键。基本上我正在尝试获得类似诅咒的cbreak()电话。(但是由于一些我无法解决的错误/错误功能,我不能使用诅咒。)这似乎应该只是一个琐碎的转义序列,但我什么也没找到。

0 投票
2 回答
307 浏览

stdout - 缓冲标准输出 (STDOUT)

默认情况下,STDOUT 是无缓冲的吗?如果不是,它的默认缓冲类型是什么

谢谢

0 投票
5 回答
24008 浏览

android - 音频流缓冲

我需要播放实时音频流,实际上是广播。问题是我还需要管理 20 分钟的流媒体缓冲区。据我了解,用android实现并不容易。

首先我检查了 MediaPlayer,但它没有提供任何缓冲区管理方法。事实上,你甚至不能直接设置缓冲区大小。

其次,我尝试使用本地文件管理缓冲区:逐步将流下载到临时文件并切换它们。但是当您想切换到以下文件时(在 MediaPlayer 中更改数据源),音频不会连续播放。您可以听到短暂的中断。

最后一个想法是使用流代理。通常它用于在 8 以下的 Android 版本中播放流。在流代理中,您创建 ServerSocket,从音频流中读取并写入播放器。所以实际上我可以在那里管理缓冲。我可以随心所欲地缓存流并写入 MediaPlayer。但。它不适用于 Android 8。

我遇到异常:对等方重置连接 java.net.SocketException:对等方重置连接。MediaPlayer 8 不想从套接字读取数据。

因此我有两个问题:1)还有什么其他方法可以实现流缓冲?2) 如何为 android 8 适配 StreamProxy?

任何想法表示赞赏。

谢谢

0 投票
6 回答
7743 浏览

c++ - std::ifstream 缓冲区缓存

在我的应用程序中,我试图合并已排序的文件(当然要保持它们的排序),因此我必须遍历两个文件中的每个元素以将最小值写入第三个文件。这在大文件上工作得非常慢,就我看不到任何其他选择(必须完成迭代)而言,我正在尝试优化文件加载。我可以使用一定数量的 RAM,用于缓冲。我的意思是每次我可以读取一次类似 100Mb 的内容并在之后使用该缓冲区,而不是从两个文件中读取 4 个字节,直到缓冲区中没有元素,然后我将再次重新填充缓冲区。但我想 ifstream 已经在这样做了,它会给我更多的性能吗?有什么理由吗?如果 fstream 可以,也许我可以更改该缓冲区的大小?

添加

我当前的代码看起来像那样(伪代码)

我不喜欢这里的是

  • seek_back - 我必须回到以前的位置,因为没有办法偷看 4 个字节
  • 从文件中读取过多
  • 如果其中一个流在 EOF 中,它仍然会继续检查该流,而不是将另一个流的内容直接输出,但这不是一个大问题,因为块大小几乎总是相等的。

你能建议改进吗?

谢谢。

0 投票
1 回答
136 浏览

php - 循环中的 PHP 模板缓冲

我基本上是在查询上运行一个循环,并使用 PHP 的缓冲在循环中插入一个模板文件。问题是,如果我的查询中有多个结果,我最终会得到两个或更多相同的结果(循环相同的数据而不是 mysql 结果行中的下一个)。

功能...

模板如下所示:

所以,如果我有两条记录:

我最终得到

代替

我已经试过了

并将 $returnString 从函数中取出无济于事......

想法?

0 投票
1 回答
1127 浏览

javascript - 如何确定 HTML5 音频元素的缓冲何时完成

我正在尝试确定 HTML5 音频元素的缓冲何时完成,但到目前为止我找不到任何loadComplete或类似的事件。我试过使用进度事件,但是下载完成后它不会触发 - 只有在下载时才会触发,因此我不能用它来检查。我也尝试过标准load事件,但这似乎根本没有触发。

还有哪些其他事件可以让我检查缓冲是否完成,或者我是否必须使用计时器来继续检查是否a.buffered.end(0) == a.duration

谢谢,

0 投票
1 回答
5223 浏览

java - FileChannel#force 和缓冲

我现在想澄清一下,并在 FileOutputStream 和 FileChannel 之间画一些相似之处。

因此,首先,使用标准 Java io 编写文件的最有效方法似乎是使用用 BufferedOutputStream 包装的 FileOutputStream。因为它会在内部缓冲区溢出时自动刷新。能够进行单次写入(单字节、浮点数等)以及数组写入很方便,而且不用担心速度。你永远不应该忘记的唯一一件事就是关闭它(执行最后的刷新)。使用 BufferedOutputStream 包装器的好处是显而易见的,每个人都必须拥有(我希望如此)。

现在关于 FileChannel。FileChannel 有 force 方法,相当于 FileOutputStream 中的 flush,不是吗?并且 javadocs 清楚地说,您应该使用它来确保您已对目标文件进行了更改。但是,如果没有“BufferedFileChannel”包装器,我不明白何时以及为什么要使用它。换句话说,FileChannel 的缓冲在哪里?它是否像 BufferedOutputStream 一样自动隐藏在 FileChannel 本身中?如果不是,那我到底为什么需要强制方法,因为没有什么可以强制的(使用 write 方法后所有更改都已应用于文件),我是否必须自己实现缓冲?