【javaIO】IO流的介绍

IO—02IO的流的介绍

一、IO流的概念

流是一组有顺序的,有起点和终点的字节的集合,是对数据传输的总称或抽象
* 流和本质:数据传输,根据数据传输特性将流抽象为各种类,方便更直观的进行数据操作。
* 流的作用:为数据源和目的地建立了一个输送通道
* java中所有的传统的流的形式都在java.io的包下,用于实现输入和输出功能

二、流的分类

1、按 流的方向 分

输入流:只能从中读取数据,不能向其写数据
输出流:只能向其写数据,不能读数据

 输入流:指从数据源介质(磁盘、光盘、网络、鼠标、键盘)到当前内存(内存
  输出流:指从程序(内存)到目的地介质(磁盘、光盘、屏幕、网络)
  *输入流基类:inputStream、Reader
 输出流基类:OutputStream、Writer*
2、按 操作单元 分
 操作单元:字节流 字符流
  字节流操作的是单元是数据成员是8位的字节,字符流操作的是数据单元为16位的字符
  *字符流基类:Reader、Writer
  字节流基类:InputStream、OutputStream*
3、按 流的角色 分

节点流:直接和数据源连接,称之为节点流,也叫做低级流
处理流:是不能直接和数据源连接,对于一个已存在的流进行的连接和封装 也叫做高级流

三、字节流和字符流的区别

字节流已字节为单位8bit位,
* 电脑存储的数据以二进制存储,01010100
*
* 字符流的由来,因为数据编码的不同,因而有了对字符进行高效操作的流对象,本质其实就是基于字节流读取时,去查了指定的码表
* 字符流和字节流的区别:
* & **读写单位不同:**字节流以字节(8bit)为单位,字符流以字符为单位,根据码表映射字符,一次可能读取多个字节。
* & **处理对象不同:**字节流能处理所有类型的数据(如图片、avi等),字符流只能处理纯文本的数据。
* & **处理效率不同:**字节流效率较高,直接进行读取,字符流效率较低,涉及到编码解码过程
* & **可移植性不同:**字节流可移植性高,和平台无关,字符流需要考虑编码解码过程,编码和解码的码表需保持一致
*
* 字符集编码:
* 计算机底层存储的数据都是二进制存储
* 字符“a” 存储 --》码表
* 码表:将字符和数字建立起来的映射关系,字节和字符的相互转换
* 字符->字节 :编码过程 “hello” getBytes()方法,转换成字节
* 字节-》字符:解码过程 byte[]bys=new Byte{97,98,99} new String(bys);------abc
*

四、字符集编码

可以解决乱码问题(由于编码不一致)
ASCII码:一个字符+中的7位表示,对应的字节都是整数 0—XXXXXXX
* ISO-8899-1:拉丁码表:用一个字节中8位表示,可以表示整数和负数
* GBK:中文码表:用2个字节表示,2个字节中第一个字节高位为1,第二个字节高位为0
* Unicode:国际标准码表,无论什么文字,都是2个字节
* UTF-8:基于Unicode,一个字节表示存储信息,每一个字节头加入了编码信息
Charset这个类可以操作字符集编码有关的操作

  //获取当前系统默认的编码格式
        Charset charset = Charset.defaultCharset();
        System.out.println(charset );

        //当前系统支持的所有的字符集编码
        SortedMap<String, Charset> stringCharsetSortedMap = Charset.availableCharsets();
        Iterator<Map.Entry<String, Charset>> iterator = stringCharsetSortedMap.entrySet().iterator();
        while (iterator .hasNext() ){
            Map.Entry<String, Charset> next = iterator.next();
            System.out.println(next .getKey() +next .getValue() );
        }

        //判断是否支持
        Charset .isSupported("Utf-8");
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值