JavaIO流
JavaIO流
①认识IO流
IO流,即in和out,也就是输入和输出,用于程序和外部设备之间的数据传输。
流是一个抽象的概念,是指一连串的数据,可以想象成数据像水流一样流进流出,以先进先出的方式发送信息。
一般来说,流的特性有一下几点:
- 先进先出:先写入输出流的数据是最先被输入流读取到的。
 - 顺序存储:数据是一个接着一个读取,一个接着一个输出,按照顺序,不能随机访问中间的数据。(RandomAccessFIle例外!!)
 - 只读或只写:每个流对应的是一种操作,要么是输入流,要么是输出流,不能同时具备两个功能,输入流只能进行读操作,输出流只能进行写操作。如果既要写又要读,就要分别定义两个流。
 
②IO流分类
IO流分类方式有三种:
- 按照数据流方向:输入流和输出流
 - 按照数据单位:字节流和字符流
 - 按照功能:节点流和处理流
 
输入流和输出
输入和输出是相对于内存而言的,读文件是in输入流,写文件是out输出流。
字节流和字符流
论使用方式,字节流和字符流的使用方式几乎是一样的,区别就是数据单元不一样,字节流处理8位的字节,字符流处理16位的字节。
字符流出现的原因?
Java字符采用的是Unicode标准,在Unicode编码中,一个字母或者中文为两个字节。
但是在UTF-8编码就不一样了,UTF-8编码中一个中文是3个字节。
这就出现了一个问题,字节流处理中文,如果一次读写一个字符一一对应其字节数,就不会有问题。但是,如果出现一个字符对应的字节分裂开来,就出现了乱码(就无法识别了)。所以为了更好的处理中文字符,Java就推出了字符流!!
字节流和字符流的区别:
- 字节流一般用来处理图像、视频、音频等类型的文件。字符流一般是用来处理纯文本文件,不能处理图像视频等非文本文件。也就是说字符流只能处理纯文本!!
 - 字节流本身不带有缓冲区,缓冲字节流相对于普通字节流效率就会提升很多。字符流本身就带有缓冲区,缓冲字符流相对于普通字符流的话就没有字节流效率提升那么大了。
 
节点流和处理流:
- 节点流:直接操作数据读写的流
 - 处理流:对于已经存在的流的链接和封装,通过对数据进行处理为程序提供强大功能、灵活读写功能。(其中重点是缓冲流,常用)
 
注意:节点流和处理流都是应用了Java装饰者设计模式。
缓冲流:节点流每次就读写一个字节,而缓冲流会在内存中设置一个缓冲区,缓冲区存储足够的待操作数据,再与内存和磁盘进行交互。这样,总数据量不变的情况下,通过提高每次交互的数据量,减少了交互次数。
注意:不是使用缓冲流就一定会提高效率哦!!要根据实际情况而使用!!

                
            
浙公网安备 33010602011771号