JavaIO流

JavaIO流

①认识IO流

IO流,即in和out,也就是输入和输出,用于程序和外部设备之间的数据传输。

流是一个抽象的概念,是指一连串的数据,可以想象成数据像水流一样流进流出,以先进先出的方式发送信息。

一般来说,流的特性有一下几点:

  1. 先进先出:先写入输出流的数据是最先被输入流读取到的。
  2. 顺序存储:数据是一个接着一个读取,一个接着一个输出,按照顺序,不能随机访问中间的数据。(RandomAccessFIle例外!!)
  3. 只读或只写:每个流对应的是一种操作,要么是输入流,要么是输出流,不能同时具备两个功能,输入流只能进行读操作,输出流只能进行写操作。如果既要写又要读,就要分别定义两个流。

②IO流分类

IO流分类方式有三种:

  1. 按照数据流方向:输入流和输出流
  2. 按照数据单位:字节流和字符流
  3. 按照功能:节点流和处理流

输入流和输出

输入和输出是相对于内存而言的,读文件是in输入流,写文件是out输出流。

字节流和字符流

论使用方式,字节流和字符流的使用方式几乎是一样的,区别就是数据单元不一样,字节流处理8位的字节,字符流处理16位的字节。

字符流出现的原因?

Java字符采用的是Unicode标准,在Unicode编码中,一个字母或者中文为两个字节。

但是在UTF-8编码就不一样了,UTF-8编码中一个中文是3个字节。

这就出现了一个问题,字节流处理中文,如果一次读写一个字符一一对应其字节数,就不会有问题。但是,如果出现一个字符对应的字节分裂开来,就出现了乱码(就无法识别了)。所以为了更好的处理中文字符,Java就推出了字符流!!

字节流和字符流的区别:

  1. 字节流一般用来处理图像、视频、音频等类型的文件。字符流一般是用来处理纯文本文件,不能处理图像视频等非文本文件。也就是说字符流只能处理纯文本!!
  2. 字节流本身不带有缓冲区,缓冲字节流相对于普通字节流效率就会提升很多。字符流本身就带有缓冲区,缓冲字符流相对于普通字符流的话就没有字节流效率提升那么大了。

节点流和处理流:

  • 节点流:直接操作数据读写的流
  • 处理流:对于已经存在的流的链接和封装,通过对数据进行处理为程序提供强大功能、灵活读写功能。(其中重点是缓冲流,常用)

注意:节点流和处理流都是应用了Java装饰者设计模式。

缓冲流:节点流每次就读写一个字节,而缓冲流会在内存中设置一个缓冲区,缓冲区存储足够的待操作数据,再与内存和磁盘进行交互。这样,总数据量不变的情况下,通过提高每次交互的数据量,减少了交互次数。

注意:不是使用缓冲流就一定会提高效率哦!!要根据实际情况而使用!!

posted @ 2022-02-15 14:48  霜鱼CC  阅读(19)  评论(0)    收藏  举报