l 流
主要目的是:数据进行磁盘和内存的互换
流相关的API都在java.io包里面
流按照方向分有两种:
输入流和输出流,是以内存作为参照物
输入(读取)流:从数据源中,将数据读取到内存中
输出(写入)流:将内存中的数据写入到数据源
流按照传输的内容分三种
字节流,字符流,对象流
无论是哪一种流,底层部分都是以字节方式传输的。所以,其本质都是字节流,但是为了方便程序员更好的操作字符数据和对象数据,在字节流基础上做了一层包装,形成了字符流和对象流。
l API层次
字节流 的抽象父类是 InputStream和OutputStream
字符流 的抽象父类是 Reader和Writer
对象流
l 流操作的步骤
1, 建立流
2, 操作流
3, 关闭流
需要知道的小常识:
操作文件流时,如果文件不存在,那么,读取流会抛出文件未找到异常,而写入流会创建文件
关闭流的操作顺序。先读写流后写入流的话就先关写入流再关读写流。
l 字节写入和字符写入覆盖问题
FileOutputStrea(地址,true) 后面加true就代表拼接,不加就直接覆盖
FileWriter(地址,true)
l 流操作完成以后必须完成关闭,否则不仅浪费内存资源,而且写入流有可能写不进数据。
对象流
当需要对对象进行传输时,由于对象中的数据很庞大,无法直接传输。那么在传输之前,需要将对象打散成二进制的序列,以便传输。这个过程称为序列化过程。
到达目的之后,又需要将二进制序列还原成对象,这个过程称为反序列化过程。
l 对象要必须实现java.io.Serializable接口才能进行序列化
l 异常:java.io.NotSerializableException
当需要传输对象时,而该对象所在的类没有实现(Serializable)序列化接口时抛出
l transient关键字
给对象的属性做修饰的,表示在传输对象时,被transient修饰的属性值不做传输