java基础-IO流

一、概念

流的概念:

 流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称,即数据在两设备间的传输称为流。

二、流的分类:

 流按照操作单位分为字节流和字符流。字符流处理的单元为 2 个字节的 Unicode 字符;字节流处理单元为 1 个字节。java内是用Unicode 编码存储字符。

 unicode编码简而言之就是将每一个字符用16位2进制数标识。但是通常都用4位的16进制数标识。

 unicode码对每一个字符用4位16进制数表示。具体规则是:将一个字符(char)的高8位与低8位分别取出,转化为16进制数,如果转化的16进制数的长度不足2位,则在其后补0,然后将高、低8位转成的16进制字符串拼接起来并在前面补上"\u" 即可。 

 字符流的由来: 因为数据编码的不同,而有了对字符进行高效操作的流对象。本质其实就是基于字节流读取时,去查了指定的码表。 字节流和字符流的区别:

  • 读写单位不同:字节流以字节(8bit)为单位,字符流以字符为单位,根据码表映射字符,一次可能读多个字节。
  • 处理对象不同:字节流能处理所有类型的数据(如图片、avi等),而字符流只能处理字符类型的数据。

结论:只要是处理纯文本数据,就优先考虑使用字符流。 除此之外都使用字节流。

 流按照数据流向分为输入流和输出流

三、流分析

    以字节Byte为导向的流

 1、输入流InputStream

InputStream中常用的方法是public int read(byte b[], int off, int len)以及public int read(byte b[]);read(byte b[])是一种特殊的

read(byte b[], int off, int len),它的off为0,len长度为b的长度,InputStream将读取进来的字节一一放入b[]字节数组中,并将具体

读取多少个字节返回回去,直到最终返回-1或者抛出异常;这两个都是阻塞方法,直到输入的数据有效为止。

 SequenceInputStream:序列输入流(也可以认为是合并流)

 当我们需要多个输入流向程序传输数据,此时可以使用合并流,将多个输入流合并成一个SequenceInputStream流对象。

SequenceInputStream会将与之相连接的流集组合成一个输入流并从第一个输入流开始读取,直到到达文件末尾,接着从第二个输

入流读取,依次类推,直到到达包含的最后一个输入流的文件末尾为止。

 StringBufferInputStream:字符串输入流

这个类已经过时了,使用ByteArrayInputStream替换,并且这个类只能低8位被使用。

以字符char为导向的输入流reader

以 Unicode 字符为导向的 stream ,表示以 Unicode 字符为单位从 stream 中读取或往 stream 中写入信息。

InputStream中读取的是byte,而Reader中读取的是char

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值