IO入门--基本概念

IO相关概念一览

什么是IO

所谓IO即input和output的缩写,是对数据的流入和流出的一种抽象,编程中很常见的一个概念。

什么是流

体会一下这几个词:水流(静止的水想必没人会叫水流),物流,人流(此人流非彼人流 = =!),可以发现流的特点:动态的,可转移的,从一处到另一处的

java io

java为了我们调用方便,而屏蔽输入/输出源和流动细节,抽象出的用于解决数据流动问题的类体系,这就是java的io流

输入流和输出流

用于读取的流称为输入流(输入流只能用来读),用于写入的流称为输出流(输出流只能用来写)。输入输出的概念一般是针对内存来说的,流(写)入内存,从内存流(读)出。

字节流和字符流

输入输出流可操作最小单位来区分字节流和字符流,最小操作单位是一个字节(8bit)的为字节流,最小操作单位为一个字符(16bit)的为字符流,java io体系中字节操作流以stream结尾,字符操作流以reader和writer结尾

节点流和包装(处理)流

1)节点流偏向实现细节,直接与细节打交道,比如FileInputStream,而包装(处理)流偏功能,以目标功能为抽象,比如PrintStream。2)区分节点流和包装(处理)流最简单的一个方式:处理流的构造方法中需要另一个流作为参数,而节点流构造方法则是具体的物理节点,如上FileInputStream构造法中需要一个文件路径或者File对象,而PrintStream构造方法中则需要一个流对象3)包装流使用了装饰器模式(什么是装饰器模式?传送门),包装流对节点流进行了一系列功能的强化包装,让包装后的流拥有了更多的操作手段或更高的操作效率,而隐藏节点流底层的复杂性。

低级流和高级流

低级流和高级流对应的概念即对应上面的节点流和包装(处理)流概念

普通流和缓冲流

普通流和缓冲流主要是针对读写性能上提出的相对概念。普通流与缓冲流的区别在于一个一个数据的流动还是一堆一堆数据的流动。

bio,nio,aio

bio:b有两说,一为base,jdk中最早抽象出的io体系;一为block,jdk 1.0 中的io体系是阻塞的。所以两说皆有道理,一般我们认为b取block之意nio:n也有两说,一为new,针对base而言;一为non-block,针对block而言。aio:a为asynchronous,异步的,异步io,aio还有个名字叫:nio2

发展历程:bio(jdk1.0) -> nio(jdk1.4) -> aio(jdk1.7)

参考:https://blog.csdn.net/u012250875/article/details/78341874

本文分享自微信公众号 - Java后端技术栈(t-j20120622),作者:lawt

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-10-08

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 程序员,你心里就没点‘树’吗?

    看官,不要生气,我没有骂你也没有鄙视你的意思,今天就是想单纯的给大伙分享一下树的相关知识,但是我还是想说作为一名程序员,自己心里有没有点树?你会没点数吗?言归正...

    田维常
  • HashMap和TreeMap的内部结构

    1、基于哈希表的 Map 接口的实现。此实现提供所有可选的映射操作,并允许使用 null 值和 null 键。(除了非同步和允许使用 null 之外,HashM...

    田维常
  • 漫画算法:5分钟搞明白红黑树到底是什么?

    红黑树就是一种平衡的二叉查找树,说他平衡的意思是他不会变成“瘸子”,左腿特别长或者右腿特别长。除了符合二叉查找树的特性之外,还具体下列的特性:

    田维常
  • python多个%s的使用方法 %格式符

    格式符为真实值预留位置,并控制显示的格式。格式符可以包含有一个类型码,用以控制显示的类型,如下:

    py3study
  • 卷积神经网络的网络结构——以LeNet-5为例

    卷积神经网络是一种特殊的多层神经网络,像其它的神经网络一样,卷积神经网络也使用一种反向传播算法来进行训练,不同之处在于网络的结构。卷积神经网络的网络连接具有局部...

    用户1148525
  • 熊市结束的信号?

    BTC的历史最高点出现在2017年12月,接近20000$,最近的一个最低点是2018年12月,大概为3200$,跌掉了80%多。

    申龙斌
  • DSP的系统构成

    DSP一般有四大系统模块:竞价系统、策略系统、预警监控系统和资源管理系统,核心是竞价和策略,策略是竞价的约束条件,每个系统下面有多个子系统,具体的结构关系如下图...

    GA小站
  • 字节流与字符流,字节流和字符流的使用哪个多?

    而上一篇的java 读写操作大文件 BufferedReader和RandomAccessFile

    ydymz
  • Flutter 初体验

    Flutter的横空出世,很大程度上降低了移动应用的开发成本;我是一名苦逼的iOS开发者,兼职写点Android开发,对Flutter的出现比一般人要敏感很多,...

    Bison
  • Redis-事务和锁

    Redis事务可以一次执行多个命令,事务中的所有命令都会序列化、按顺序地执行。事务在执行的过程中,不会被其他客户端发送来的命令请求所打断。 事务特性ACID原...

    唔仄lo咚锵

扫码关注云+社区

领取腾讯云代金券