面试题:对象序列化和反序列化(附代码)

对象序列化: 将对象转化为二进制进行存储或者传输。对象转化为二进制的过程。
对象反序列化:将二进制数据还原为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();
		}
		 
	}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值