目录
常用IO流
对象流
对象流和管道流
对象流没有结尾的标志,会抛出EOF异常
序列化和反序列化:
介绍:
-
当需要将对象传输到另一台计算机上等操作时,需要将对象转换为一个字节序列,而这个过程就称为对象序列化,相反,将一个字节序列转换为对应的对象,这个过程就称为对象的反序列化。
-
对象---对象序列化--->字节序列 字节序列---反序列化--->对象
Serializable接口
介绍:
-
ObjectOutputStream在对对象进行序列化时有一个要求,就是需要序列化的对象所属的类必须实现Serializable接口。
-
实现该接口不需要重写任何方法。其只是作为可序列化的标志。
-
通常实现该接口的类需要提供一个常量serialVersionUID,表明该类的版本。
-
若不显示的声明,在对象序列化时也会根据当前类的各个方面计算该类的默认serialVersionUID,但不同平台编译器实现有所不同,所以若向跨平台,都应显示的声明版本号。
public class Student implements Serializable {}
transient关键字
介绍:
被transient关键字修饰的属性在序列化时其值将被忽略
private Integer id; private String name; private transient Integer age;
对象输入流
-
ObjectInputStream:— Object readObject(),对象反序列化
-
从流中读取字节并转换为对应的对象。
ObjectInputStream objectInputStream= new ObjectInputStream(new FileInputStream("D:\\file\\obj.txt")); Student student=(Student) objectInputStream.readObject();//将对象字节序列转成对象==>反序列化 System.out.println(student);
对象输出流
-
ObjectOutputStream:— void writeObject(Object o),对象序列化
-
将给定的对象转换为一个字节序列后写出。
ObjectOutputStream outputStream= new ObjectOutputStream(new FileOutputStream("D:\\file\\obj.txt")); outputStream.writeObject(student);//将对象转成字节序列==>序列化
缓冲字节流
介绍:
-
Java的字节缓冲流是对字节流一种封装,通过在内存中开辟缓冲区来提高 I/O 操作的效率。
-
缓冲流的工作原理是将数据先写入缓冲区中,当缓冲区满时再一次性写入文件或输出流,或者当缓冲区为空时一次性从文件或输入流中读取一定量的数据。这样可以减少系统的 I/O 操作次数,提高系统的 I/O 效率,从而提高程序的运行效率
缓冲字节输入流
-
BufferedInputStream,内部维护着一个缓冲区(字节数组),该流读取文件会尽可能多的一次性读取若干字节并存入缓冲区,然后逐一的将字节返回,直到缓冲区数据读完,再次读取若干字节从而反复,减少读取次数,提高读取效率
构造方法 | 说明 |
---|---|
BufferedInputStream(InputStream in) | 将字节输入流转成缓冲字节输入流 |
BufferedInputStream(InputStream in,int size) | 将字节输入流转成缓冲字节输入流,并指定缓冲区大小 |
BufferedInputStream bis=new BufferedInputStream(new FileInputStream("D:\\file\\a.jpg"),1024);//字节流转成缓存字节流 int d=-1; while((d=bis.read())!=-1){}
缓冲字节输出流
-
BufferedOutputStream,写数据时先将数据存入缓冲区,缓冲区满将数据一次性全部写出。
-
一次性批量写出若干数据减少写出次数来提高写出效率
构造方法 | 说明 |
---|---|
BufferedOutputStream(OutputStream out) | 将字节输出流转成缓冲字节输出流 |
BufferedOutputStream(OutputStream out, |