java--IO

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

在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作为基类
字节流 字符流
输入流 InputStream Reader
输出流 OutputStream Writer
3、按照角色划分:节点流、处理流
节点流:介质流,数据从一个介质读的过程或数据向一个介质写的过程;低级流,直接与磁盘交互;
处理流:过滤流,高级流,对节点流进行了封装,(以低级流创建)与节点流交互;
字符和字节的区别:
字节:存储的是二进制数,面向计算机的;
字符:存储的是字符,最终存储在电脑上还是字节,所以需要编码、解码;
1、读写的单元不同:字节流是以8bit位单位,字符流以字符为单位,根据码表映射,一次可以读取多个字节;
2、处理的对象不同:字节流能处理所有类型的数据,而字符流只能处理字符类型的数据;
3、处理效率:字节流效率高,不需要向字符流那样编码解码;
4、可移植性:字节流可移植性好,和平台无关,字符流需要考虑编码解码过程,编码解码需保持一致;
节点流和处理流的区别:
节点流直接和介质相连接,处理流直接和节点流相连接;
字符相关点:
码表:将字符和数字建立起映射关系,最终实现字节和字符的相互转换;
字符----->字节:编码 “hello”.getbytes(); byte[]
字节----->字符:解码 byte[] x = {97,98,99};
ASCII码:一个字符中的7位表示,对应的字节都是整数,
ISO-8899-1:拉丁码表,用一个字节中8位表示;
GBK:汉字,中文码表,用两个字节表示,两个字节中第一个字节高位为1,第二个字节的高位为0;
Unicode:国际标准码表,无论什么文字,都是两个字节;
UTF-8:国际码表的优化,基于Unicode,一个字节表示存储信息,每一个字节头加入了编码信息;
编码类:Charset:
static Charset defaultCharset():当前机器的默认编码;
static SortedMap<String,Charset> availableCharsets():当前支持的所有字符集编码;
static boolean isSupported(String charsetName):判断是否支持当前编码格式;
static Charset forName(String charsetName):实例化一个编码;
final CharBuffer decode(ByteBuffer bb):解码
final ByteBuffer encode(String str):编码
流使用规律
1.明确是读操作还是写操作(数据源是当前程序或者数据目的地)读:InputStream/Reader 写:OutputStream/Writer
2.明确操作字符还是字节(操作基类)读:字节InputStream 字符Reader 写:字节OutputStream 字符Writer
3.操作的基本介质(具体类) 读:文件file ?内存char,array,double 网络Socket 键盘System.in 写:文件file
4.是否需要额外操作 缓冲区:Buffer 转换:InputStreamReader OutputStreamWriter

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值