流:
流按照方向分分为输入流和输出流。以内存做参照物。当从数据源中将数据读取到内存中时,叫做输入流,也叫读取流。当将内存中的数据写入到数据源时,叫做输出流,也叫写入流
流按照传输的内容分分为字节流,字符流和对象流。无论是哪一种流,底层部分都是以字节方式传输的。所以,其本质都是字节流。但是,为了方便程序员更好的操作对象数据和字符数据,所以再字节流的基础上做了一层包装,形成了字符流和对象流。
字节流的父类:Inputstream和Outputstream
字符流的父类:Reader和Writer
流操作的步骤:
- 建立流
- 操作流
- 关闭流
操作文件流时,如果文件不存在,读取流会抛出文件未找到的异常,而写入流会创建新文件。但是不会创建新目录(抛出异常)。
Bufferedreader(套接流):在一个流的基础上再套接一个流,也称为高级流
流操作完成后,必须完成关闭操作,否则不仅浪费内存资源,而且写入流有可能写不进数据。
对象流:
序列化:当需要对对象进行传输时,由于对象中的数据很庞大,无法进行直接传输。那么在传输之前,需要将对象打散成二进制序列,以便传输,这个过程称为序列化过程,到达目的地后,又需要将二进制序列还原成对象,这个过程称为饭序列化过程。
需要实现序列化的对象在序列化之前,必须先实现Serializable接口
java.io.NotSerializableException:需要传输对象时,对象没有实现序列化接口。
Transient:属性修饰符,表示在传输对象时,被transient修饰的属性值不做传输。