ObjectOutputStream这样的类是用来输入输出对象的,但是前提是这个对象必须实现序列化接口Serializable这是规定
序列化重点
序列化和反序列化的定义:
如图:
序列化反序列化
序列化。。
package com.imooc.io;
import java.io.FileInputStream;
import java.io.ObjectInputStream;
public class ObjectSeriaDemo1 {
public static void main(String[] args) throws Exception{
String file = "demo/obj.dat";
//1.对象的序列化
/*ObjectOutputStream oos = new ObjectOutputStream(
new FileOutputStream(file));
Student stu = new Student("10001", "张三", 20);
oos.writeObject(stu);
oos.flush();
oos.close();*/
ObjectInputStream ois = new ObjectInputStream(
new FileInputStream(file));
Student stu = (Student)ois.readObject();
System.out.println(stu);
ois.close();
}
}
package com.imooc.io;
import java.io.Serializable;
public class Student implements Serializable{
private String stuno;
private String stuname;
//该元素不会进行jvm默认的序列化,也可以自己完成这个元素的序列化
private transient int stuage;
public Student(String stuno, String stuname, int stuage) {
super();
this.stuno = stuno;
this.stuname = stuname;
this.stuage = stuage;
}
public String getStuno() {
return stuno;
}
public void setStuno(String stuno) {
this.stuno = stuno;
}
public String getStuname() {
return stuname;
}
public void setStuname(String stuname) {
this.stuname = stuname;
}
public int getStuage() {
return stuage;
}
public void setStuage(int stuage) {
this.stuage = stuage;
}
@Override
public String toString() {
return "Student [stuno=" + stuno + ", stuname=" + stuname + ", stuage="
+ stuage + "]";
}
private void writeObject(java.io.ObjectOutputStream s)
throws java.io.IOException{
s.defaultWriteObject();//把jvm能默认序列化的元素进行序列化操作
s.writeInt(stuage);//自己完成stuage的序列化
}
private void readObject(java.io.ObjectInputStream s)
throws java.io.IOException, ClassNotFoundException{
s.defaultReadObject();//把jvm能默认反序列化的元素进行反序列化操作
this.stuage = s.readInt();//自己完成stuage的反序列化操作
}
}
对象的序列化,反序列化
3.对象的序列化,反序列化
1)对象序列化,就是将Object转换成byte序列,反之叫对象的反序列化
2)序列化流(ObjectOutputStream),是过滤流----writeObject
反序列化流(ObjectInputStream)---readObject
3)序列化接口(Serializable)
对象必须实现序列化接口,才能进行序列化,否则将出现异常
这个接口,没有任何方法,只是一个标准
有的时候我们想要把一个Java对象变成字节流的形式传出去,有的时候我们想要从一个字节流中恢复一个Java对象。例如,有的时候我们想要
把一个Java对象写入到硬盘或者传输到网路上面的其它计算机,这时我们就需要自己去通过java把相应的对象写成转换成字节流
对象的序列化
对象的序列化和反序列化
1.对象序列化,就是将Object转换成byte序列,反之叫对象的反序列化
2.序列化流(ObjectOutputStream),是过滤流-----writeObject
反序列化流(ObjectInputStream)-----readObject
3.序列化接口(Serializable) implements Serializable
对象必须实现序列化接口,才能进行序列化,否则将出现异常
这个接口,没有任何方法,只是一个标准
//对象的序列化(Serializable)与反序列化
//对象的序列化就是将Object转换成byte序列,反之为反序列化。
ObjectOutputStream(序列化流)/ObjectInputStream(反序列化流)。
//序列化时对象必须实现序列化的接口,否则将出现异常。
//只有将对象序列化以后才能反序列化。
//对象ob序列化
ObjectOutputStream oos=new ObjectOutputStream(FileOutputStream);
Object ob=new Object(参数);
oos.writeObject();
oos.close();
//对象反序列化
ObjectInputStream ops=new ObjectInputStream(FileInputStream);
Object ob1=(Object)ops.readObject();
ops.close();
System.out.println(stu)这句,括号里的“stu”如果不是String类型的话,就自动调用student的toString()方法.不用显式打出来,即不用写成stu.toString()。如果没有重写toString方法,则输出的就是对象stu的地址.
对象序列化操作 将Object转化为byte序列,反之叫做反序列
序列化流 ObjectOutputStream 是过滤流-------writeObject
反序列化流 ObjectInputStream-----readObject
序列化接口 Serializable,对象必须实现序列化接口,才能进行序列化,否则会出现异常,该接口没有任何方法
3.对象的序列化,反序列化
1)对象序列化,就是将Object转换成byte序列,反之叫对象的反序列化
2)序列化流(ObjectOutputStream),是过滤流----writeObject
反序列化流(ObjectInputStream)---readObject
3)序列化接口(Serializable)
对象必须实现序列化接口 ,才能进行序列化,否则将出现异常
这个接口,没有任何方法,只是一个标准
构造方法是什么 怎么生成
get 和set方法
序列化和反序列话是基于二进制流的,序列话便是把Student对象的信息以二进制存储在文件obj.bat中,用文本编辑器打开自然是乱码。只有通过反序列话才能将存储的二进制读取出来,然后显示在控制台上。
3.对象的序列化、反序列化
1)对象的序列化,就是将Object转换成byte序列,反之叫对象的反序列化
2)序列化流(ObjectOutputStream),是过滤流---writeObject
反序列化流(ObjectInputStream)---readObject
3)序列化接口(Serializable)
对象必须实现序列化接口,才能进行序列化,否则将出现异常
这个接口,没有任何方法,只是一个标准
序列化与反序列化实例
String file = "demo/obj.dat"; //1.对象的序列化 /*ObjectOutputStream oos = new ObjectOutputStream( new FileOutputStream(file)); Student stu = new Student("10001", "张三", 20); oos.writeObject(stu); oos.flush(); oos.close();*/ ObjectInputStream ois = new ObjectInputStream( new FileInputStream(file)); Student stu = (Student)ois.readObject(); System.out.println(stu); ois.close();
3.对象的序列化和反序列化
代码解析:
对象的类:public class Student implements Serializable
主运行代码:
String file="demo/obj.dat";
ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(file));
Student s=new Student(100001,"拉萨市",20);
oos.writeObject(s);//一次写入一个Object
oos.flush();
oos.close();
ObjectInputStream ois=new ObjectInputStream(new FileInputStream(file));
Student s2=(Student)ois.readObject();//反序列化取出来的类要进行强制类型转换,一次读取一个Object
System.out.println(s2);
ois.close();
3.对象的序列化和反序列化
1)对象序列化,就是把对象Object以字节Byte的格式从内存存到文件里,反之叫反序列化
2)序列化流ObjectOutputStream--->方法writeObject()
反序列化流ObjectInputStream--->方法readObject()
3)序列化接口(Serializable)
对象序列化要先实现序列化接口
这个接口没有任何方法,只是一个规定
代码解析:
对象的类:public class Student implements Serializable
主运行代码:
String file="demo/obj.dat";
ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(file));
Student s=new Student(100001,"拉萨市",20);
oos.writeObject(s);//一次写入一个Object
oos.flush();
oos.close();
ObjectInputStream ois=new ObjectInputStream(new FileInputStream(file));
Student s2=(Student)ois.readObject();//反序列化取出来的类要进行强制类型转换,一次读取一个Object
System.out.println(s2);
ois.close();
输出流都写个flush方法。
把对象序列化成字节在网络中传输
对象必须实现Serializable接口才能进行序列化
对象序列化:把Object转换成byte序列。
反之为反序列化
2