IO流
什么是IO流: IO Stream(input output Steam):输入输出流 本质指的就是计算机中数据的流入和流出: 从磁盘上将数据读入内存 从内存中将数据写入到硬盘 也就是说,从狭义上来说,我们一般IO流指的就是磁盘和内存之间的数据流动 但是从广义来说,不同电脑之间的数据流动,也是一种IO流,网络通信也是IO流(socket) 在本地进程间的数据流动,就是狭义上的IO流 在远程进程间的数据流动,也就是一种IO流(Socket)
|-- IO部分 |-- File对象 |-- IO的概念 |-- IO的分类 |-- 字节流 |-- InputStream 字节输入流父类 |-- OutputStream 字节输出流 |-- 过滤流(装饰流) BufferedInputStream BufferedOutputStream |-- 数据流 DataInputStream DataOutputStream |-- 字符流 以字符串,肉眼可以直接识别,很小的空间,存储较多是文字数据 |-- Writer 字符输出流父类 |-- Reader 字符输入流父类
|-- 字符缓存流完成字符的操作
通过行来读取和写入字符串
|-- 字符串输入缓存流
BufferedReader
|-- 字符串输出缓存流
BufferedWriter
不太推荐大家使用BufferedWriter,因为需要手动添加换行符
推荐使用打印输出流(节点流)
PrintWriter
|-- print()
|-- println()
java的IO流
将底层的open函数进行了大量的封装,提供了大量好用的、符合各种场景的IO对象供大家使用 java.io包
InputStream类:字节输入流
OutputStream类:字节输出流
数据流的使用:
我们之前讲解的流,如果要保存数字,只要将数字转换为字符串,也就是说 以字符流的形式保存数据,这样有时候并不是我们需要的,我们有时候就是 需要以字节保存数据,因此就可以使用数据流来包装文件流完成。
字符流:
字符流就是以字符的形式传递数据的IO流
电脑中,所有的数据都可以以字节的形式传递
不是所有的数据都可以转换字符的!!!
|-- InputStrean 输入字节流
|-- OutputStream 输出字节流
字符流
|-- Reader
|-- Writer
注意:字符流是存在编码的!!!!
转换流:
能够实现字节流和字符流之间的转换 字符串对象:能够转换为字节数组或者字符数组
|-- InputStreamReader:将字节流转换为字符流操作
一个字节流,如果可以转换为字符流,一般建议转换字符流操作,类似于BufferedReader
readLine()方法,非常方便操作字符流
但是需要注意两个问题:
1、字符流存在着编码问题!!!
2、有些字节是无法转换为字符流的(如图片、视频等流媒体文件)
|-- OutputStreamWriter:
将字符流转换为字节流输出,好处就是可以使用字符流的好用的方法来处理字节流
对象流:
|-- ObjectInputStream 对象输入流,从磁盘等保存介质中读取已经保存的对象数据 |-- ObjectOutputStream 将对象转换为数据,保存起来
发现了问题:
只能保存系统提供一些类的对象(如包装类、字符串等类)
原因:java中要保存对象,该对象的类必须实现序列化接口!!!!
在java中,如果要保存对象,必须序列化该对象!!!
对象序列化:
序列化(串行化):将程序中的对象这种逻辑概念通过特定方式做成字节(字符)数据,以方便与保存或者传输
反序列化:将序列化后的数据重新还原为抽象的对象
对象持久化:
将对象保存起来
transient关键字:
该关键字是用来修饰属性,一旦某个属性被这个关键字修饰,
则该属性不会进行持久化,也就是该值不会保存!!!
|