对象序列化: 将对象转化为二进制进行存储或者传输。对象转化为二进制的过程。
对象反序列化:将二进制数据还原为java对象的过程。二进制转化为java对象的过程。
对象的序列化
1.创建Pet类
2.创建Pet类的对象dog
所属类要实现serializable接口(标志性接口,表示该类的对象可被实例化)
Pet pet = new Pet(110,"来福","男");
//创建ByteArrayOutputStream对象
ByteArrayOutputStream baos=new ByteArrayOutputStream();
//创建ObjectOoutputStream 对象
ObjectOutputStream oos=new ObjectOutputStream(baos);
//将对象写入到baos对象的字节数组属性buf中
oos.writeObject(pet);
//拿到pet对象的二进制数据
byte[] byteArray = baos.toByteArray();
System.out.println(Arrays.toString(byteArray));
//创建FileOutputStream对象
FileOutputStream fos=new FileOutputStream("D:/test2/3.txt");
//将byteArray中的对象数据,写入3.txt
fos.write(byteArray);
oos.flush();
oos.close();
fos.close();
对象的反序列化
public static void main(String[] args) {
try {
完成对象反序列化//
//创建FileInputStream对象
FileInputStream fis=new FileInputStream("D:/test2/3.txt");
//获得byte数组,该字节数组中封装3.txt读取的内容
int len=-1;
byte[] buf=new byte[1024100];
while((len=fis.read(buf))!=-1) {
}
//创建ByteArrayInputStream对象,将读取的对象数据,封装到了bais字节数组属性buf
ByteArrayInputStream bais=new ByteArrayInputStream(buf);
//创建ObjectInputStream ois
ObjectInputStream ois=new ObjectInputStream(bais);
//通过ois读取ByteArrayInputStream对象的buf属性中的数据
Object obj = ois.readObject();
System.out.println(obj instanceof Pet);
//向下转型
Pet p=(Pet)obj;
System.out.println(p);
fis.close();
ois.close();
}catch(Exception ex) {
ex.printStackTrace();
}
}