Qt QIODevice::Unbuffered 理解
Unbuffered 就是无缓冲方式。何谓缓冲?科学释意就是我们常说的 buffer, 具体指针对 I/O 的缓存。它可以有很多更加具体的形式:
+-------------------+-------------------+
| Process A | Process B |
+-------------------+-------------------+
| C runtime library | C runtime library | C RTL buffers
+-------------------+-------------------+
| OS caches | Operating system buffers
+---------------------------------------+
| Disk controller hardware cache | Disk hardware buffers
+---------------------------------------+
| Disk |
+---------------------------------------+
如图所示,有 C/C++ 语言层面的、操作系统层面的,甚至硬盘层面的。其作用在于,创造一个中间层,从而避免频繁调用底层"昂贵"资源的调配权。
如你这里提到的写文件,你可能希望一个字节一个字节的往硬盘上写。但"写硬盘"存在 I/O 瓶颈,比起内存要慢许多。如果没有 buffer, 你每写一个字节的数据,就要去写一次硬盘,想象一下,会多么的慢。
而有了缓冲呢?你写入的字节通通都先放到一块 buffer 上(内存),由于是内存操作,所以速度非常快。等你写完、或者缓存的量到达某个限度,语言的 RTL 或 OS 才会将这一块数据,一次性写入硬盘中。
比较一下上述区别,体会一下缓冲的含义。这种策略,不仅常见于 I/O,上自浏览器的 cache, 下自 CPU 的高速缓存,其实都会用到。
形象比喻(可能不雅)
譬如拉屎,你是拉一点就冲厕所呢?还是都拉完,才冲?
好吧,这是告诉你具体问题具体分析,你需不需要设置 Unbuffered
,要看你使用的时机。
最后一点注意:
Certain flags, such as
Unbuffered
and Truncate, are meaningless when used with some subclasses. Some of these restrictions are implied by the type of device that is represented by a subclass. In other cases, the restriction may be due to the implementation, or may be imposed by the underlying platform; for example, QTcpSocket does not supportUnbuffered
mode, and limitations in the native API preventQFile
from supporting Unbuffered on Windows.
即,QTcpSocket
不支持 Unbuffered
,Windows 原生 API 也对该功能有限制。言下之意:尽量避免使用。
回复
Qt QIODevice::Unbuffered 理解相关推荐
- QT之深入理解QThread
QT之深入理解QThread 理解QThread之前需要了解下QThread类,QThread拥有的资源如下(摘录于QT 5.1 帮助文档): 在以上资源中,本文重点关注槽:start():信号:st ...
- QT moveToThread线程理解
一.moveToThread创建开启线程步骤: (1)创建继承自QObject类,实现槽函数. (2)将QObject类通过moveToThread方法移到QThread线程中,使QObject类依附 ...
- QT入门看这一篇就够了——超详细讲解(40000多字详细讲解,涵盖qt大量知识)
目录 一.Qt概述 1.1 什么是Qt 1.2 Qt的发展史 1.3 Qt的优势 1.4 Qt版本 1.5 成功案例 二.创建Qt项目 2.1 使用向导创建 2.2 一个最简单的Qt应用程序 2.2. ...
- 【Qt 从入门到入土】下篇
[Qt 从入门到入土]上篇 一个非常好的学习 Qt 的视频 本文目录 6. 对话框QDialog 6.1 基本概念 6.2 标准对话框 6.3 自定义消息框 6.4 消息对话框 6.5 标准文件对话框 ...
- Qt中文文档-QFile
公众号:Qt那些事儿 QFile Class QFile 类提供读写文件的接口. 属性 方法 Header: #include qmake: QT += core Inherits: QFileDev ...
- Qt实现串口通信总结
Qt实现串口通信总结 注意: Qt5发布之前,Qt实现串口通信一般是采用第三方类库qextserialport.Qt5发布后自带了QtSerialPort 能够支持串口通信. 1.Qextserial ...
- QT 创建文件,文件夹
QFile文件操作 文件打开方式: QIODevice::NotOpen 0x0000 设备不打开. QIODevice::ReadOnly 0x0001 设备 以只读的方式打开. QIODevice ...
- Qt扫盲- QTcpSocket 理论总结
QTcpSocket 理论总结 一.概述 二.使用 一.概述 TCP (Transmission Control Protocol)是一种可靠的.面向流的.面向连接的传输协议.它特别适合于数据的连续传 ...
- QT实现局域网聊天工具(带UDP文件传输)
三年多以前刚学习QT写的一个局域网聊天工具小项目. 由于是初学QT时写的,代码比较简略,也没时间好好整理项目,仅供大家参考相关TCP以及UDP的连接与传输功能 以及相关控件的基本使用方法. 1. ...
最新文章
- 【PC工具】更新图片批量处理工具Image Tuner,绿色免安装工具软件
- BugkuCTF-MISC题神奇宝贝
- java如何将String转换为enum
- 设计模式之工厂模式(工厂方法模式 和 抽象工厂模式)
- Hadoop只输出Key不输出Value的小技巧
- IntelliJ Idea14 创建Maven多模块项目,多继承,热部署配置总结(一)
- 杭电 1421 搬寝室
- 屏幕录像专家录制超清视频教程如何解决转码后不清晰问题
- beetle-j2ee-application-framework框架介绍.md
- var that =this的用法详解
- 计算机科学与专业大学排名,计算机科学与技术专业大学排名
- 一文带你了解redux的工作流程——action/reducer/store
- python入门基础笔记
- Remove or reset file passwords in Office 2013
- git pull报错error: You have not concluded your merge (MERGE_HEAD exists).
- PCA(主成分分析)
- 详细解析电源滤波电容的选取与计算
- 护眼灯真的可以保护眼睛吗?2022双十二选哪款护眼灯对孩子眼睛好
- 微信小程序资料收集(一)
- 数字电子钟的设计与实现(纯数字电路,Proteus仿真)
热门文章
- 佳能ip110 linux驱动下载,佳能iP110驱动-佳能Canon PIXMA iP110驱动下载 v1.0官方版--pc6下载站...
- 移动硬盘读不出来的处理办法
- 张一鸣卸任字节跳动 CEO,网友调侃因未完成去年 OKR 被优化!
- 八本最佳管理书籍,你读过几本?
- IEEE 802.11 RTS/CTS 协议
- 【设计模式】工厂设计模式
- text函数提取年月
- 解决Uncaught ReferenceError: $ is not defined报错
- 迟重瑞果然嫁给了爱情,陈丽华不惜花费重金,安排师徒四人聚会
- 中移动员工工资待遇全揭秘