问题标签 [buffered]

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 投票
4 回答
1639 浏览

java - 如何在java中将InputStream转换为Reader?

  1. reader = new BufferedReader(new InputStreamReader(inputStream))
  2. reader = new InputStreamReader(new BufferedInputStream(inputStream))

哪个更好?为什么?

0 投票
1 回答
153 浏览

go - Golang缓冲通道:忽略/抑制发送重复值

在 golang 中从一个 goroutine 我将消息发布到缓冲通道。但是我的 reader goroutine 的处理速度可能有点慢,并且从通道中读取的任何内容都可能不会更快。因此,为了阻止通道缓冲区被填满,我不希望在缓冲通道中再次发布相同的数据。有没有办法做到这一点?

0 投票
1 回答
45 浏览

java - Buffered Read line on 读取第一行

我正在编写一个程序来解密已加密的文本文件。我的缓冲阅读器似乎只读取文本文件的第一行?我的解密函数()仅打印出仅正确解密的第一行就表明了这一点。我附上了我的代码片段,但我不确定哪里出错了。b变量是彻底解密代码,与文件读取无关

这部分在我的主要功能中

这就是我的解密功能所采用的

我想我需要它进入循环并不断地向我的解密函数提供这些行,但是我认为这是由 != null 部分完成的

任何帮助将不胜感激。谢谢

0 投票
2 回答
427 浏览

go - 使用 For 循环的 Goroutine 缓冲通道

我是 golang 的新手,正在尝试使用 goroutines 试验缓冲通道。我以为我理解了缓冲通道是如何与 goroutine 一起工作的,直到遇到下面的例子,这对我来说是一个脑筋急转弯,并且对我迄今为止所学的概念给予了极大的帮助。

这是我从文章https://medium.com/rungo/anatomy-of-channels-in-go-concurrency-in-go-1ec336086adb中获取的原始示例。

代码#1:(通道容量=3,通道长度=3,环路长度=4)

输出:

解释:在上面的程序中,通道 c 的缓冲容量为 3。也就是说它可以容纳 3 个值。由于缓冲区没有溢出(因为我们没有推送任何新值),主 goroutine 不会阻塞并且程序存在。我已经理解了这个例子。

代码#2:(通道容量=3,通道长度=4,环路长度=4)

输出:

解释:由于现在填充的缓冲区通过 c <- 4 发送操作获得推送,主 goroutine 块和正方形 goroutine 排出所有值。这也是我理解的。

代码#3:(通道容量=3,通道长度=5,环路长度=5)

输出:

说明:我为通道添加了另一个值,即 5。虽然通道容量只有 3。

我知道在通道接收到 n+1 个发送操作之前,它不会阻塞当前的 goroutine。在值 4 上,它接收 n+1 操作,这就是 goroutine 被阻塞并耗尽所有值的原因,但我无法理解的是通道如何处理 n+2 操作。是不是因为我们已经从通道中读取了值,并且我们有更多的阅读空间?

0 投票
0 回答
27 浏览

php - 从 cron 调度的 shell 脚本启动时避免缓冲 PHP 输出

我的设置与许多类似的查询共享成分,但似乎有一个独特的问题。它。

我在命令行上运行了一个冗长的 PHP 进程,并输出到标准输出。它足够长我想在后台运行它,同时通过日志文件实时监控它的输出,所以我将它的输出定向到一个文件(>> log.out)并将它从终端分离并在后台运行与nohup。最后,我想确保进程在崩溃或我的服务器重新启动时重新启动,所以我有一个 cron 作业,它定期执行一个 shell 脚本,检查进程是否已经在运行,如果没有,则启动它。这是 bash 脚本的相关部分:

如果我自己从命令行执行脚本,它会很好地工作:它会在后台启动进程,并且进程会不断地将其记录到 daemon.log 中,我可以在其中对其进行检查。这是我使用的命令行(*):

但是,如果我从 cron 执行完全相同的命令,那么 php 进程的输出会被缓冲,并且不会出现在 daemon.log 中,直到进程退出或被杀死(此时进程生成的所有输出都会立即出现)。请注意,在这两种情况下,实际进程都是在后台匿名运行的;区别仅在于将该进程启动到后台的 shell 脚本本身是从交互式命令行运行还是从 shell 脚本运行。

所以我的问题是: cron 和 shell 脚本的命令行执行有什么不同,我怎样才能强制这个事件链保持我最里面的进程的输出不缓冲?

就我所尝试的而言,按照此处的建议,我尝试使用 stdbuf 通过在各种事物上加上前缀“stdbuf -o0 -e0”来关闭缓冲,包括

  • 我的 nohup 命令中的 php 调用
  • 我的 shell 脚本中的 nohup 调用
  • 我的 cron 选项卡中的 shell 脚本调用

但是这些都没有消除我看到的缓冲。

我还探索了 php 自己的缓冲区刷新命令(例如,flush()),但这些也没有效果。我自己对文档的解释是这些应该是无关紧要的;在命令行调用( https://www.php.net/manual/en/outcontrol.configuration.php)中输出缓冲总是关闭的。

任何人都可以帮忙吗?

谢谢,尼克

(* 是的,我知道我将 shell 脚本输出记录到一个文件以及守护程序的输出到另一个文件。这样我就可以跟踪守护程序需要重新启动的频率。缓冲不是这一秒的问题日志文件,因为 shell 脚本在每次 cron 时都会立即完成;它只是内部 PHP 进程,它不会立即完成,它的输出在某处被停止。)