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 support Unbuffered mode, and limitations in the native API prevent QFile from supporting Unbuffered on Windows.

即,QTcpSocket 不支持 Unbuffered,Windows 原生 API 也对该功能有限制。言下之意:尽量避免使用。

回复

Qt QIODevice::Unbuffered 理解相关推荐

  1. QT之深入理解QThread

    QT之深入理解QThread 理解QThread之前需要了解下QThread类,QThread拥有的资源如下(摘录于QT 5.1 帮助文档): 在以上资源中,本文重点关注槽:start():信号:st ...

  2. QT moveToThread线程理解

    一.moveToThread创建开启线程步骤: (1)创建继承自QObject类,实现槽函数. (2)将QObject类通过moveToThread方法移到QThread线程中,使QObject类依附 ...

  3. 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. ...

  4. 【Qt 从入门到入土】下篇

    [Qt 从入门到入土]上篇 一个非常好的学习 Qt 的视频 本文目录 6. 对话框QDialog 6.1 基本概念 6.2 标准对话框 6.3 自定义消息框 6.4 消息对话框 6.5 标准文件对话框 ...

  5. Qt中文文档-QFile

    公众号:Qt那些事儿 QFile Class QFile 类提供读写文件的接口. 属性 方法 Header: #include qmake: QT += core Inherits: QFileDev ...

  6. Qt实现串口通信总结

    Qt实现串口通信总结 注意: Qt5发布之前,Qt实现串口通信一般是采用第三方类库qextserialport.Qt5发布后自带了QtSerialPort 能够支持串口通信. 1.Qextserial ...

  7. QT 创建文件,文件夹

    QFile文件操作 文件打开方式: QIODevice::NotOpen 0x0000 设备不打开. QIODevice::ReadOnly 0x0001 设备 以只读的方式打开. QIODevice ...

  8. Qt扫盲- QTcpSocket 理论总结

    QTcpSocket 理论总结 一.概述 二.使用 一.概述 TCP (Transmission Control Protocol)是一种可靠的.面向流的.面向连接的传输协议.它特别适合于数据的连续传 ...

  9. QT实现局域网聊天工具(带UDP文件传输)

    三年多以前刚学习QT写的一个局域网聊天工具小项目. 由于是初学QT时写的,代码比较简略,也没时间好好整理项目,仅供大家参考相关TCP以及UDP的连接与传输功能   以及相关控件的基本使用方法. 1. ...

最新文章

  1. 【PC工具】更新图片批量处理工具Image Tuner,绿色免安装工具软件
  2. BugkuCTF-MISC题神奇宝贝
  3. java如何将String转换为enum
  4. 设计模式之工厂模式(工厂方法模式 和 抽象工厂模式)
  5. Hadoop只输出Key不输出Value的小技巧‏
  6. IntelliJ Idea14 创建Maven多模块项目,多继承,热部署配置总结(一)
  7. 杭电 1421 搬寝室
  8. 屏幕录像专家录制超清视频教程如何解决转码后不清晰问题
  9. beetle-j2ee-application-framework框架介绍.md
  10. var that =this的用法详解
  11. 计算机科学与专业大学排名,计算机科学与技术专业大学排名
  12. 一文带你了解redux的工作流程——action/reducer/store
  13. python入门基础笔记
  14. Remove or reset file passwords in Office 2013
  15. git pull报错error: You have not concluded your merge (MERGE_HEAD exists).
  16. PCA(主成分分析)
  17. 详细解析电源滤波电容的选取与计算
  18. 护眼灯真的可以保护眼睛吗?2022双十二选哪款护眼灯对孩子眼睛好
  19. 微信小程序资料收集(一)
  20. 数字电子钟的设计与实现(纯数字电路,Proteus仿真)

热门文章

  1. 佳能ip110 linux驱动下载,佳能iP110驱动-佳能Canon PIXMA iP110驱动下载 v1.0官方版--pc6下载站...
  2. 移动硬盘读不出来的处理办法
  3. 张一鸣卸任字节跳动 CEO,网友调侃因未完成去年 OKR 被优化!
  4. 八本最佳管理书籍,你读过几本?
  5. IEEE 802.11 RTS/CTS 协议
  6. 【设计模式】工厂设计模式
  7. text函数提取年月
  8. 解决Uncaught ReferenceError: $ is not defined报错
  9. 迟重瑞果然嫁给了爱情,陈丽华不惜花费重金,安排师徒四人聚会
  10. 中移动员工工资待遇全揭秘