失效链接处理 |
Java IO流 PDF 下载
本站整理下载:
相关截图:
主要内容:
一 .流的简述
原由:在变量、数组、对象和集合中存储的数据是暂时的,程序结束他们就丢失。
为了保存相应数据,则出现了java 的 I/O 流 技术。
作用:将数据保存至文本文件(字符)和 二进制文件(字节)中,并能读取。
Java.io 包几乎包含了所有操作输入、输出需要的类。所有这些流类代表了输入源和输出目标。
Java.io 包中的流支持的格式如:基本类型、对象、本地化字符集等等。
一个流可以理解为一个数据的序列:输入流 即 读取数据,输出流 即 向目标写数据。
可按以下方式分类
数据流向: 输入流 和 输出流
数据单位: 字节流 和 字符流
按功能: 节点流 和 处理流
1.输入流 和 输出流
如下图:
2.字节流 和 字符流
字节流和字符流的用法几乎完成全一样,区别在于字节流和字符流所操作的数据单元不同。
字节流操作的单元是数据单元是8位的字节,
字符流操作的是数据单元为16位的字符。
为什么要有字符流?
Java中字符是采用Unicode标准,Unicode 编码中,一个英文为一个字节,一个中文为两个字节。
而在UTF-8编码中,一个中文字符是3个字节。例如下面图中,“云深不知处”5个中文对应的是15个字节:-28-70-111-26-73-79-28-72-115-25-97-91-27-92-124
那么问题是,一旦将一个字符对应的字节分裂开来,就会出现乱码了。
为了更方便地处理中文这些字符,Java就推出了字符流。
总之:字节流可以处理一切文件,而字符流只能处理纯文本文件。
3、节点流和处理流
节点流:直接操作数据读写的流类,比如FileInputStream 。
处理流:对一个已存在的流的链接和封装,通过对数据进行处理为程序提供功能强大、灵活的读写功能,例如BufferedInputStream(缓冲字节流)
处理流和节点流应用了Java的装饰者设计模式。
下图就很形象地描绘了节点流和处理流,处理流是对节点流的封装,最终的数据处理还是由节点流完成的。
在诸多处理流中,有一个非常重要,那就是缓冲流。
我们知道,程序与磁盘的交互相对于内存运算是很慢的,容易成为程序的性能瓶颈。减少程序与磁盘的交互,是提升程序效率一种有效手段。缓冲流,就应用这种思路:普通流每次读写一个字节,而缓冲流在内存中设置一个缓存区,缓冲区先存储足够的待操作数据后,再与内存或磁盘进行交互。这样,在总数据量不变的情况下,通过提高每次交互的数据量,减少了交互次数。
字节流本身没有缓冲区,缓冲字节流相对于字节流,效率提升非常高。
而字符流本身就带有缓冲区,缓冲字符流相对于字符流效率提升就不是那么大了。
|