流与缓冲区的理解

流的概念

  • 流是一个 过程 ,一个 动态 的概念

(可以把流想象成水在水管中流动的过程,想象成商品快递运送的过程。cin和cout就是 执行 流这个过程的人)

  • 流 负责 操作 缓冲区,输入输出流是 操作实现

    • 对于输入,cin负责把输入缓冲区中的内容传递给程序;
    • 对于输出,cout负责把输出缓冲区中的内容传递给屏幕。

(cin和cout把缓冲区的数据变成流,然后 搬运 到相应的目的地。cin和cout就是个 搬运工搬运的过程 就是流)


  • 程序流源流目标 之间的桥梁

    • 使得C++程序可以以 相同的方式 对待来自 键盘 的输入和来自 文件 的输入
    • C++程序只检查 字节流 ,而不需要知道字节来自何方
    • C++程序处理输出的方式将独立于其去向
  • 输入流需要两个连接,每端各一个
    • 文件端连接 提供了流的来源
    • 程序端连接 将流的流出部分转储到程序中
    • (文件端连接可以是文件,也可以是设备)
    • 对输出的管理包括将 输出流 连接到 程序 以及将 输出目标 关联起来

缓冲区的概念

  • 标准库 提供缓冲是为了减少对read和write的调用(能更高效地处理输入和输出)
  • 用作中介的内存块,将信息从设备传输到程序或从程序传输给设备的 临时存储工具

参考资料

C/C++中关于输入输出缓冲区和流的概念理解

c语言库函数

c++文件和流

c++标准输入输出流

C++ STL 基础及应用(4) 输出输出流

红黑联盟 https://www.2cto.com/kf/ware/cpp/index.html

原文地址:https://www.cnblogs.com/wangzhiyi/p/9491969.html

时间: 2024-10-11 18:57:46

流与缓冲区的理解的相关文章

黑马程序员——字符流的缓冲区详解

import java.io.BufferedWriter; import java.io.FileWriter; import java.io.IOException; public class Demo1 { /** * @param args * 字符流的缓冲区 * BufferedWriter * BufferedReader * 缓冲区要结合流才可以使用 * 在流的基础上对流动功能进行增强 * * 缓冲区的出现是为了提高,流的操作效率而出现的 * 所以在创建缓冲区之前,必须要先有流对象

JAVA之旅(二十五)——文件复制,字符流的缓冲区,BufferedWriter,BufferedReader,通过缓冲区复制文件,readLine工作原理,自定义readLine

JAVA之旅(二十五)--文件复制,字符流的缓冲区,BufferedWriter,BufferedReader,通过缓冲区复制文件,readLine工作原理,自定义readLine 我们继续IO上个篇幅讲 一.文本复制 读写都说了,我们来看下其他的操作,我们首先来看复制 复制原理:其实就是将C盘下的文件数据存储到D盘的一个文件中 实现的步骤: 1.在D盘创建一个文件,用于存储文件中的数据 2.定义读取流和文件关联 3.通过不断的读写完成数据的存储 关闭资源 package com.lgl.hel

java io 学习之三 字符流的缓冲区

 /** 字符流的缓冲区 缓冲区的出现,提高了对数据的读写效率 对应的类: BufferedWriter BufferedReader 缓冲区要结合流才可以使用 缓冲区是在流的基础上对流的功能进行增强 软件的优化可以分为:设计优化和性能优化 设计优化:对代码进行重构,让代码实现更强的可扩展性和灵活性,复用性. 提高性能最常用的的手段是:缓冲区  线程池 BufferedWriter 构造方法摘要 BufferedWriter(Writer out) 创建一个使用默认大小输出缓冲区的缓冲字符输

IO流上:概述、字符流、缓冲区

一.IO流概述 概述: IO流简单来说就是Input和Output流,IO流主要是用来处理设备之间的数据传输,java对于数据的操作都是通过流实现,而java用于操作流的对象都在IO包中. 分类: 按操作数据分为:字节流和字符流. 如:Reader和InpurStream 按流向分:输入流和输出流.如:InputStream和OutputStream IO流常用的基类: * InputStream    ,    OutputStream 字符流的抽象基类: * Reader       ,  

面试官:谈谈你对IO流和NIO的理解

一.概念 NIO即New IO,这个库是在JDK1.4中才引入的.NIO和IO有相同的作用和目的,但实现方式不同,NIO主要用到的是块,所以NIO的效率要比IO高很多.在Java API中提供了两套NIO,一套是针对标准输入输出NIO,另一套就是网络编程NIO. 二.NIO和IO的主要区别 下表总结了Java IO和NIO之间的主要区别: 1.面向流与面向缓冲 Java IO和NIO之间第一个最大的区别是,IO是面向流的,NIO是面向缓冲区的. Java IO面向流意味着每次从流中读一个或多个字

innodb insert buffer 插入缓冲区的理解

今天在做一个大业务的数据删除时,看到下面的性能曲线图 在删除动作开始之后,insert buffer 大小增加到140.对于这些状态参数的说明 InnoDB Insert Buffer 插入缓冲,并不是缓存的一部分,而是物理页,对于非聚集索引的插入或更新操作,不是每一次直接插入索引页.而是先判断插入的非聚集索引页是否在缓冲池中.如果在,则直接插入,如果不再,则先放入一个插入缓冲区中.然后再以一定的频率执行插入缓冲和非聚集索引页子节点的合并操作.使用条件:非聚集索引,非唯一 Ibuf Insert

stdin流和缓冲区

scanf()函数是从标准输入流stdin读取格式化数据. scanf()函数是从输入流缓冲区中读取数据,而并非从键盘缓冲区读取数据 标准文件 IO 相比于文件 IO 来说,在用户层中增加了一个用户缓冲区.也就是说在使用标准IO 来操作文件的时候,都会经过此用户层的缓冲区.比如使用标准 IO 来向文件中写入内容的时候,首先内容会首先被写入到用户缓冲区中,等到 缓冲区满 或者 刷新缓冲区 的时候在调用文件 IO 将内容写入到内核中的磁盘缓冲区中. =========================

C++编程中对缓冲区的理解(OS默认4096大小的缓冲区,有例子,很形象)

什么是缓冲区缓冲区又称为缓存,它是内存空间的一部分.也就是说,在内存空间中预留了一定的存储空间,这些存储空间用来缓冲输入或输出的数据,这部分预留的空间就叫做缓冲区.缓冲区根据其对应的是输入设备还是输出设备,分为输入缓冲区和输出缓冲区. 为什么要引入缓冲区我们为什么要引入缓冲区呢?比如我们从磁盘里取信息,我们先把读出的数据放在缓冲区,计算机再直接从缓冲区中取数据,等缓冲区的数据取完后再去磁盘中读取,这样就可以减少磁盘的读写次数,再加上计算机对缓冲区的操作大大快于对磁盘的操作,故应用缓冲区可大大提高

关于 流(Stream) 的概念理解

什么是流,我认为流就是对IO设备的一种抽象.流将各种千差万别的设备统一抽象成一种模型,向用户提供一个统一的编程接口,用户无需了解设备内部细节,就可完成对设备的IO操作,大大简化开发难度. 流这个概念很重要,很大一部分初涉猎编程的人(包括我),犯眼高手低的错误,认为流不就是对控制台,文件的读写操作吗?其实不然,流也是一个非常重要的编程思想,就像面向对象一样,要深刻理解贯彻在脑子里.要具备对 流 足够的理论知识,才能游刃有余的面对各种数据IO问题. 废话少说. c#语言里,所有的流类型 的基类是 S