- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在阅读有关 Buffer Streams 的内容。我搜索了一下,找到了很多答案,这些答案澄清了我的概念,但仍然有更多问题。
经过搜索,我了解到,Buffer是临时内存(RAM),它可以帮助程序快速读取数据,而不是硬盘。当缓冲区为空时,将调用 native 输入 API
。
阅读更多内容后,我得到了答案 from here也就是说。
Reading data from disk byte-by-byte is very inefficient. One way to speed it up is to use a buffer: instead of reading one byte at a time, you read a few thousand bytes at once, and put them in a buffer, in memory. Then you can look at the bytes in the buffer one by one.
我有两个困惑,
1:数据如何/由谁填充到缓冲区? (原生 API 如何?)如上面引用的,谁一次填充了数千个字节?并且会消耗相同的时间。假设我有 5MB 数据,并且 5MB 在 Buffer 中加载一次需要 5 秒。然后程序在 5 秒内使用缓冲区中的数据。总共 10 秒。但如果我跳过缓冲,则程序以 1MB/2 秒的速度从硬盘获取直接数据,总计 10 秒。请澄清我的这个困惑。
2:第二个该行如何工作
BufferedReader inputStream = new BufferedReader(new FileReader("xanadu.txt"));
我在想 FileReader 将数据写入缓冲区,然后 BufferedReader 从缓冲区内存读取数据?还解释一下这一点。
谢谢。
最佳答案
至于在读/写期间使用缓冲的性能,它的影响可能很小,因为操作系统也会缓存,但是缓冲会减少对操作系统的调用次数,这会产生影响。
当您在顶部添加其他操作(例如字符编码/解码或压缩/解压缩)时,影响会更大,因为这些操作在 block 中完成时效率更高。
<小时/>你的第二个问题说:
As I'm thinking FileReader write data to buffer, then BufferedReader read data from buffer memory? Also explain this.
我相信你的想法是错误的。是的,从技术上讲,FileReader 会将数据写入a缓冲区,但该缓冲区不是由 FileReader 定义的,而是由 FileReader.read(buffer)
方法的调用者定义的.
当某些代码调用 BufferedReader.read()(任何重载)时,该操作从外部启动。然后 BufferedReader 将检查其缓冲区,如果缓冲区中有足够的数据,它将返回数据,不涉及 FileReader。如果需要更多数据,BufferedReader 将调用 FileReader.read(buffer)
方法来获取下一个数据 block 。
这是一个拉操作,而不是推送,这意味着数据是由调用者从读取器中拉出的。
关于java - 缓冲流在 Java 内部是如何工作的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32799859/
我正在使用 MediaPlayer 在我的应用程序中播放在线 mp3 文件中的一些声音。 但是,即使在播放完成后,我也会在控制台中收到一行又一行的回调和缓冲。 10-24 08:08:48.467
我有一个简单的多边形。 dfr p = st_polygon(list(as.matrix(dfr))) > pbuf = st_buffer(p, .4) > plot(pbuf) > plot(
这可能又是一些愚蠢的问题,也许这确实是我所缺少的东西,但我很难让 glMultiDrawArrays 在 OpenGL4 中工作。 我发现了很多这样的解释: for (int i = 0; i #i
这仅仅是根据网络速度调整预缓冲内容量的问题吗?你是否在一开始就为此调整一次,每秒......? 或者它更复杂 - 对您的网络速度记录历史进行采样并取平均值/中值并对其进行调整? 最佳答案 您的第二段总
嗨,我正在使用 FFmpeg Autogen C#。当我使用 mkv 输出作为文件并使用 h264 rtsp 流作为输入时,一切正常。编解码器是 libx264 ffmpeg.avio_open(
我需要多次遍历几个文本文件的行。目前这是通过多个 with open("file.txt") as f: for line in f: # do something 虽然性能还
昨天给同学们写了一个xinetd小练习:做一个反向回显程序。 为了学习新东西,我尝试实现一个 Haskell 解决方案。琐碎的main = forever $ interact reverse不起作用
我正在阅读《实时渲染第三版》中的遮挡剔除部分,但我无法理解它是如何工作的。一些问题: “Z 金字塔”有何贡献?为什么我们需要多种分辨率的 Z 缓冲区?在书中,它的显示如下(左侧): 八叉树结构与用于一
我通过串行端口与设备通信。 我已成功获取 InputStream 并读取设备发送的内容。 但问题是,我根本不知道何时停止阅读并继续执行另一项任务。 这是简化的代码: inputStream = ser
我有以下代码: func (q *Queue) GetStreams(qi *QueueInfo) { channel := make(chan error, len(qi.AudioChun
在我调用 -play 之前,有没有办法让 MPMusicPlayerController 缓冲内容?还是在您设置队列时默认执行此操作? AVAudioPlayer 有 -prepareToPlay 方
我正在编写一个数据库 备份函数,从System.Diagnostics.Process 对象 读取StandardOutput (StreamReader) 属性。我已成功写入普通文件。 //This
我有一个 wpf 应用程序,其中所有 viewModel 都继承自实现 INotifyPropertyChanged 的类 NotifyPropertyChangeClass(见下文)。 我想限制
我需要类似于 withLatestFrom 的东西,对应于下图: ---------A-----------------B-- -1-2-3------4------5-6-7-8---- -----
有没有办法缓冲 OutputStream,在返回之前修改它?这是我的代码片段: public ServletOutputStream getOutputStream() throws IOExcept
目前我们有实现服务器通信协议(protocol)缓冲的需求。如果有人对此有任何意见,他们可以向我提供任何意见吗。 最佳答案 请查看以下 Protocol Buffer 链接。 http://code.
所以我目前正在开发一个 Java 应用程序,该应用程序应该将特定事件记录到数据库中。我希望每分钟最多有 15 到 20 次插入,基本上我想知道我是否应该为每个插入语句建立一个新连接,或者只要应用程序正
请考虑以下代码,包括两个线程 buffering_thread(用一条消息填充缓冲区指针)和 sending_thread(清空缓冲区): #include "msg.cpp" msg * buffe
是否可以在线播放由两个或多个视频文件组成的视频? 由于我原来的帖子不够清楚,这里有扩展的解释和问题。 我的站点托管在 Linux/Apache/PHP 服务器上。我有 FLV/F4V 格式的视频文件。
这是我用于缓冲和转换传入事件的代码: public Publisher> logs(String eventId) { ConnectableObservable connectableObs
我是一名优秀的程序员,十分优秀!