IO流-简介

一:概念

IO流:input和output的简称,用来处理设备之间数据的传输。

java对数据的操作是通过流的方式

Java用于操作流的对象都在IO包中

流按照操作数据分为两种:字符流和字节流

流按流向分为:输入流和输出流

 

二:字符流的由来ascii

        由于计算机只能识别二进制数据 ,故早期的流都是二进制的,像媒体文件等所有的文件都是可以通过字节流来处理的,后来人们将文本类的文件单独分离出来,这些文本文件经常使用,就弄了个字符流,以美国为例,将abcd等26个字母和一些其他的字符分别和二进制数对应起来,例如‘a’对应的是1000001(十进制为65),这样成立的就是ASCII码,当人们输入'a'时,在计算机中实际存储的是1000001这个二进制数,中国也将汉字与二进制数一一对应映射为了GBK码。但是这样每个国家都有一个编码表,不利于维护,且容易出现乱码,后来国际组织将世界上所有国家的语言与二进制数一一对应生成了unicode码表,在unicode码表中每个字符都占用两个字节,比较浪费空间,例如一个字母'a'为1000001,只需要一个字节就能存储了,如果用两个字节来存它比较浪费,故在unicode的基础上优化产生了UTF-8码表,在UTF-8码表中,需要几个字节就分配几个字节,这样比较合理。

 

三:乱码的由来与解决

      由来:

      我的电脑采用的是GBK编码,当我在电脑中如果汉字“我”时,那么就会去查GBK表,将汉字“我”在GBK表中对于的二进制数存入计算机中,如果这些保存的二进制数要显示在采用UTF-8编码的电脑上,那么会去查UTF-8表,此时UTF-8中该二进制对于的汉字肯定就 不是“我”了,这就产生了乱码

      解决:

      通过字符流来解决,这也是字符流产生的原因之一,字符流对象中融入了编码,就是说我们在字符流操作数据时可以指定编码,例如我在存入时指定为GBK编码,在读取时也指定为GBK编码,这样就不会出现乱码了。

 

四:使用时机

        字符流:对于文本类的使用字符流比较合适

         字节流:对于媒体类图片类的使用字节流,因为媒体和图片总不能映射为编码表吧,通用的是字节流,因为字符流也是基于字节流的,字节流可以处理所有类型的文件

 

五:IO流常用基类

1.字节流的抽象基类

  • InputStream
  • OutputStream

2.字符流的抽象基类

  • Reader
  • Writer

注:以这四个基类派生出来的子类都是以其父类为后缀,例如InputStream的子类FileInputStream;Reader的子类FileReader;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值