IO流-对象流
1.理解
- - 对象流主要用于操作Java对象,将Java对象存储到磁盘山海或在网络中传输
- - 将Java对象存储到磁盘或进行网络传输,我们成为序列化(流化)存储
- - 将磁盘上存储的文件读取到Java程序中,并还原Java对象,这个过程称为反序列化(还原)
- - 对象流通过两个类实现ObjectInputStream(对象输入流),ObjectOutputStream(对象输出流)
- - java中不是所有对象都可以存到磁盘或在网络中传输
- - Java中规定只有实现序列化接口的对象猜允许进行"序列化操作",否则不允许,会报没有序列化异常"NotSerializableException" - 序列化接口指java.io.Serializable接口
- - java.io.Serializable接口是一个标识接口,接口中没有任何方法和属性,该接口只用于表示当前对象是否允许序列化
- - 当要对一个对象进行序列化操作时,JVM会先检测该对象是否实现了Serializable接口,如果实现了,则允许序列化,如果没有实现则报错(不允许序列化)
- - Java中除了基本类型在进行磁盘存储或网络传输时不需要进行序列化,其他类型都需要
2.实例
源码
User类
package 对象流;import java.io.Serializable; import java.util.PrimitiveIterator;public class User implements Serializable {private Integer userId;private String uaername;private String password;public Integer getUserId() {return userId;}public void setUserId(Integer userId) {this.userId = userId;}public String getUaername() {return uaername;}public void setUaername(String uaername) {this.uaername = uaername;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}public User(Integer userId, String uaername, String password) {this.userId = userId;this.uaername = uaername;this.password = password;}@Overridepublic String toString() {return "User{" +"userId=" + userId +", uaername='" + uaername + '\'' +", password='" + password + '\'' +'}';}public User() {} }
package 对象流;import java.io.*;public class ObjectStreamDemo {public static void main(String[] args) throws IOException, ClassNotFoundException {objectInputStreamDemo();}/*** 将已经序列化的文件读入到程序中,并转换java对象* 反序列化*/public static void objectInputStreamDemo() throws IOException, ClassNotFoundException {ObjectInputStream objectInputStream=new ObjectInputStream((new FileInputStream("E:/user.obj")));User user=(User) objectInputStream.readObject();System.out.println(user);objectInputStream.close();System.out.println(user.getUserId());System.out.println(user.getPassword());System.out.println(user.getUaername());}/*** 对象输出流* 使用对象输出流将一个Java对象写出到磁盘的文件中*/public static void objectOutputStreamDemo() throws IOException {User user=new User(107,"jiazhong","123456");//对象输出流ObjectOutputStream objectOutputStream=new ObjectOutputStream(new FileOutputStream("E:/user.obj"));//将user对象写出到文件中objectOutputStream.writeObject(user);objectOutputStream.flush();objectOutputStream.close();} }