java I/O

一、流

流:数据的有序集合,能从一端传输到另一端的过程流
本质:数据传输

  在Java API中,可以从其中读入一个字节序列的对象称作输入流,可以向其中写入一个字节序列的对象叫输出流。这些字节序列的来源地和目的地可以是文件,也可以是网络,或者磁盘,抽象类InputStream和OutputStream构成了输入/输出(I/O)层次结构的基础;
  因为面向字节的流不便于处理以Unicode形式存储的信息(因为其中每个字符都使用了多字节来表示),所以抽象类Reader和Writer中继承出来一个专门用来处理Unicode字符的单独的类层次结构,这些类拥有的写入和写出操作都是基于两字节的Unicode码元的,而不是基于单字节的字符;

二、分类

1. 4种IO流的基类

字节输入流:InputStream
字节输出流:OutputStream
字符输入流:Reader
字符输出流:Writer

2. 流的划分

  • 按照方向划分:

    • 输入流:将数据从介质(磁盘、网络)到当前程序的传输
      • 输入流是以InputStream和Reader为基类
    • 输出流:将数据从程序写入到存储介质中
      • 输出流是以OutputStream和Writer为基类
  • 按照操作单元划分

    • 字节流:二进制表示的数据,一个字节8bit位
      • 字节流是以InputStream和OutputStream为基类
    • 字符流:将数据以字符形式表示
      • 字符流是以Reader和Writer作为基类
字节流字符流
输入流InputStreamReader
输出流OutputStreamWriter
  • 按照角色划分
    • 节点流(介质流) : 数据从 / 向一个介质(磁盘、鼠标、屏幕)读 / 写的流,也称之为低级流
    • 处理流(过滤流) : 和节点流直接相连接的流

3. 字节和字符的区别

字节:存储的数据是二进制数
字符:存储的是字符

  • 读写的单元不同:

    • 字节流是以字节8bit为单位
    • 字符流是以字符为单位,根据码表映射字符,一次可以读取多个字节
  • 处理的对象不同

    • 字节流可以处理所有类型的数据(图片,视频)
    • 字符流只能处理字符类型的数据
  • 处理效率

    • 字节流效率较高,直接进行读取
    • 字符流效率较低,涉及到编解码
  • 可移植性

    • 字节流的可移植性高,和平台无关
    • 字符流需考虑编解码过程,编解码需保持一致

4. 节点流和处理流的区别

节点流直接和介质相连接;
介质流直接和节点流相连接;

5. 编解码与常见码表

计算机底层数据存储都是二进制进行存储

  • 码表:将字符和数字建立起映射关系,字节和字符的相互转换
  • 编码过程:字符—> 字节
  • 解码过程:字节–>字符

常见码表:

ASCII码:一个字节中的7位表示,对应字节都是整数 0-xxxxxxx
ISO-8899-1 拉丁码表 :用一个字节中的8位表示,可以表示整数和负数
GBK中文码表 :用两个字节表示,2个字节中,第一个字节高位为1,第二个字节高位为0
Unicode国际标准码表:无论什么文字都是两个字节
UTF-8 基于Unicode,一个字节表示存储信息,每一个字节头加入了编码信息

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值