问题标签 [io-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 投票
1 回答
548 浏览

erlang - 如何在 Erlang 的标准输入中按字符读取

我正在尝试编写一个基本的视频游戏,并希望从键盘输入输入。因此,我需要读取标准输入上的字符,因为它们是生成的。由于缓冲,io:get_chars, io:fread 只有在按下返回键后才会返回。

  1. 是否可以在标准输入中访问生成的字符?
  2. 我该怎么做?

该项目的重点不是制作一个真实的游戏,它只是一种学习 Erlang 的方式。因此性能不是问题。

编辑:这个项目似乎提供了我正在寻找的功能。不过,如果我没记错的话,部分代码是用 C 编写的,并通过消息传递将字符发送到 Erlang 部分。这种方法是否有替代 Erlang 原生的替代方法,或者这是唯一可行的方法?

0 投票
3 回答
4755 浏览

java - 在写入文件时计算java中文本文件的大小

这个问题是对这个问题中接受的答案的跟进。我正在尝试实施 Aaron 建议的方法:包装 FileOutputStream 以包含逻辑以记录迄今为止写入的字节数。然而,这种方法似乎并没有按预期工作。OutputStreamWriter 似乎正在使用StreamEncoder,它在委托调用 FileOutputStream.write() 方法之前缓冲数据。

这是一个小演示:

和驱动程序类:

输出 :-

写入字节数:0
写入字节数:0
...
写入字节数:8192
写入字节数:8192
...

如输出所示,StreamEncoder 在委托调用 FileOutputStream 的 write() 方法之前最多缓冲 8192 个字节。是否有任何解决方法可以在任何时刻将字节数写入文件?

0 投票
1 回答
1029 浏览

qt - 如何将数据存储在 Qt 中的“动态缓冲区”中?

我试过QBuffer但它似乎对我没有用。我需要类似Java中的Buffer 类的东西

即,我想在缓冲区中注入数据,并且当我读取 n 大小的数据(从末尾)时,应该将其删除或将查找指针移动到正确的位置。

上下文:我必须通过串口发送文件(逐行)。主程序注入文件和我的管理连接的线程,尽可能从缓冲区发送数据。

0 投票
1 回答
252 浏览

linux-kernel - Using user-buffered I/O for File operations

I am a newbie to system programming please mind me if my doubt is very vague.

I read that inbuilt user-space buffers are used so that we can access block sized data through a system call via the kernel which takes a huge over head but in the user-space we can make minute access to small sized data.I understood how this method is efficient but what i did not understand is,since these user-buffers are pertained to each single process that opens the file.

How will a process recognize the minute changes that are made to a file when both are simultaneously accessing the file.

Does this not create a problem as processes will access the old data but not the data that is changed by some other process which is still in the user-space buffer.

Please mind me if any mistakes.

0 投票
2 回答
4172 浏览

sql-server - SQL server - 高缓冲 IO 和网络 IO

我有一个关于 SQL Server 的性能调整问题。

我有一个需要每个月运行的程序,它需要超过 24 小时才能完成。我需要调整这个程序,希望可以将运行时间减少到 12 小时或更短。

由于该程序不是我们开发的,我无法检查程序内容并对其进行修改。我所能做的就是打开 SQL 服务器分析器和活动监视器来跟踪和分析 sql 内容。我禁用了未使用的触发器并做了一些内务处理,但运行时间只减少了 1 小时。

发现网络I/O和缓冲区I/O偏高,不知道是什么原因和含义?

在此处输入图像描述

谁能告诉我这两个问题(网络 I/O 和黄油 I/O)的原因?对优化这个程序有什么建议吗?

谢谢!

0 投票
1 回答
86 浏览

java - Java with NetBeans 7.2.1 - 执行顺序问题

考虑 NetBeans Java 应用程序中的以下两个类。主要类:

像这样的工人阶级:

奇怪的是,输出结果如下:

它应该在哪里:

如果我将 netbeans 的处理器亲和性设置为仅使用一个 cpu 核心,那么至少初始部分是好的,而另一个控制消息(工人停止。)仍然是碎片化的。受输出消息的干扰。

使用 Eclipse 执行相同的操作会产生预期的执行顺序。

有谁知道这里发生了什么?- 非常感谢您提前提供的任何建议!

PS:NetBeans 7.2.1 使用 jdk1.7.0_03,Eclipse 版本是 Mars.2 Release (4.5.2) - 将代码从 worker 类转移到 main 类的 main 方法而不使用其他方法时甚至出现问题根本比主要方法。

0 投票
1 回答
2008 浏览

python - 从 Windows 上的 subprocess.stdout 实时读取

需要强调的是,问题是实时读取而不是非阻塞读取。之前有人问过,例如subprocess.Popen.stdout - 实时读取标准输出(再次)。但是没有提出令人满意的解决方案。

例如,以下代码尝试模拟 python shell。

但是,从p.stdout. 搜索了一圈后,我发现了以下两种可能的解决方案。

  1. 使用fctrlO_NONBLOCK
  2. 使用threadqueue

虽然第一个解决方案可能工作并且只在 linux 上工作,但第二个解决方案只是将阻塞读取转换为非阻塞读取,即我无法获得子进程的实时输出。例如,如果我输入 ' ',则使用第二种解决方案print("hello")将一无所获。p.stdout

也许,有人会建议p.communite。不幸的是,它不适合这种情况,因为它会关闭标准输入,如此所述。

那么,有什么适用于Windows的解决方案吗?

已编辑:即使-u打开并p.stdout.read替换为p.stdout.readline,问题仍然存在。

解决方案:以下是基于 JF Sebastian 的回答和评论的最终代码。

需要注意的是,当命令触发无输出时,程序会挂起。

0 投票
1 回答
712 浏览

bash - Cygwin 终端缓冲区 STDOUT

我使用 Altera Quartus 软件,它带有自己的 Cygwin 发行版和一个哑终端,根据 Altera 在我的“开始”菜单中放置的快捷方式,使用

这个批处理文件为 Quartus 配置环境并启动 bash。当我使用此窗口运行 Altera 工具时,它们的输出会立即(未缓冲)和彩色输出。

我也有我自己的带有 Xserver 和终端(即 lxterminal、mrxvt、xfce4-terminal 等)的 Cygwin 安装。我已经修改了 Altera 的批处理文件以在 Cygwin 中配置 Altera 的环境,并且我可以运行 Altera 的所有工具。但是,当我运行这些工具时,它们的输出既不是彩色的(没什么大不了的,但令人惊讶),并且在所有输出同时出现时缓冲直到执行结束。

有人对如何绕过这种缓冲有任何想法吗?

0 投票
2 回答
806 浏览

c - 标准 I/O 流 -- fgets() 缓冲类型

《unix环境中的高级编程》一书在第15章讨论了管道,它表明我们在处理标准I/O函数时应该注意缓冲类型。

不同打开的标准 I/O 流的缓冲类型是(在本书的第 5 章中讨论):

  • 标准误是unbuffered
  • 连接到终端设备的流是line-buffered
  • 所有其他流是fully-buffered

当父/子连接到 a时,他们用来通信pipe的端(应该是类型对象,根据接口)应该根据上面的规则列表(因为它是连接到的流)。但是那一章中示例代码的行为似乎不是。FILE *fully-bufferedpipefully-buffered

这是示例代码:

myuclc.c:

popen1.c:

所以我的问题是:fgets()在第 15 行popen1.c应该fully-buffered根据缓冲规则,为什么它的行为类似于line-bufferedunbuffered

此外,我之前也尝试setvbuf()fgets()专门将缓冲类型设置为_IOFBF(full-buffered) of fpin,还是不行。

0 投票
1 回答
871 浏览

bash - bash,链接 grep 命令,在数据到来时进行处理

当我使用单个 grep 命令时,它会实时处理和输出数据。

这是我的简单测试文件test.sh

我执行以下操作:

一切都很好。'a' 立即出现,然后是 'ab' 等。

但是当我像这样管道多个 grep 命令时

我只得到最后的输出,而不是它来的时候!终端保持空白,直到处理完整个文件,然后一次性输出所有内容。

这是为什么?

我如何链接/级联多个 grep 而不会丢失“过程和输出”属性?

这是用于 greping 和处理具有大量数据的实时大型日志,我只有机会将过滤后的版本保存到磁盘,而不是会很快填满磁盘的巨大原始输出。