Java基础之序列化对象Serialized

Java基础之序列化对象Serialized文章目录序列化对象Serialized目的:序列化类型应用场景代码案例直接应用自定义对象序列化序列化对象Serialized目的:序列化机制允许将实现序列化的Java对象转换成字节序列,这些字节序列可以被保存在磁盘上,或者通过网络传输,以备以后重新恢复成原来的对象.序列化类型对象的序列化(serialize)指将一个Java对象写入IO流中对象的反序列化机制(Deserialize)则指从IO流中恢复该Java对象.应用场景当你想把的内存中的对象保存到一个文件中或者数据库中时候;

大家好,又见面了,我是你们的朋友全栈君。

序列化对象Serialized

目的:

  • 序列化机制允许将实现序列化的Java对象转换成字节序列 ,这些字节序列可以被保存在磁盘上,或者通过网络传输,以备以后重新恢复成原来的对象.

序列化类型

  • 对象的序列化(serialize)指将一个Java对象写入IO流中
  • 对象的反序列化机制(Deserialize)则指从IO流中恢复该Java对象.

应用场景

  • 当你想把的内存中的对象保存到一个文件中或者数据库中时候;
  • 当你想用套接字在网络上传送对象的时候;

对于一般的类型都会实现该Serialized接口,例如:String、Data所以我们可以直接用。

代码案例

直接应用

  • 将对象序列化
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;
import java.util.Date;
/** * 序列化对象(Serializable) * 将对象的状态信息转换为可以存储或传输的形式的过程。 * @author wenhua * */
public class ObjectOutDate { 
   
public static void main(String[] args) throws IOException { 
   
	// 封装文件目录:即将序列化对象保存的文件
	FileOutputStream out = new FileOutputStream("object.txt");
	// 创建序列化对象
	ObjectOutputStream oout = new ObjectOutputStream(out);
	// 将需要序列化的对象写入该文件
	oout.writeObject(new Date());// date包已经实现了Serializable接口所以直接保存
	// 关闭资源
	oout.close();
	}
}
  • 反序列化对象
import java.io.FileInputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.util.Date;

/** * 反序列化对象(即创建一个对象) * 序列化的对象Date、String已经实现了implements java.io.Serializable * @author wenhua * */
public class ObjectInDate { 
   
	public static void main(String[] args) throws Exception, IOException { 
   
		// 封装文件
		FileInputStream inputStream = new FileInputStream("object.txt");
		// 创建反序列化对象:即输出流
		ObjectInputStream oin = new ObjectInputStream(inputStream);
		// 接收对象
		Date date = (Date) oin.readObject();
		// 输出文件
		System.out.println(date);// Tue May 19 17:44:23 CST 2020
		// 关闭资源
		oin.close();
	}
}

自定义对象序列化

  • 自定义对象类
import java.io.Serializable;

/** * 实现序列化接口的对象 * 注意:需要显示的声明序列化id号,不然当类信息改变时系统生成的id号就会改变 * transient/static关键字修饰的不被序列化 * @author wenhua * */
public class User implements Serializable { 
   

	/** * 为类生成一个版本号,序列化ID */
	private static final long serialVersionUID = 1L;
	private int sum;
	private String name;
	private transient Integer age;
	private static Integer code;
	
	public User() { 
   
		super();
	}
	
	public User(int sum, String name,Integer age,Integer code) { 
   
		super();
		this.sum = sum;
		this.name = name;
		this.age = age;
		this.code = code;
	}

	@Override
	public String toString() { 
   
		return "User [sum=" + sum + ", name=" + name + ", age=" + age + ", code=" + code + "]";
	}
	
}
  • 自定义对象序列化
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;

/** * 使用自定义对象的序列化 * @author wenhua * */
public class ObjectOutUser { 
   
public static void main(String[] args) throws IOException { 
   
	// 封装文件
	FileOutputStream out = new FileOutputStream("user.txt");
	// 创建序列化对象流
	ObjectOutputStream oout = new ObjectOutputStream(out);
	// 创建对象
	User jim = new User(100,"Jim",21,1);
	// 存储对象
	oout.writeObject(jim);
	// 关闭资源
	oout.close();
	}
}
  • 自定义对象的反序列化
import java.io.FileInputStream;
import java.io.IOException;
import java.io.ObjectInputStream;

/** * 反序列化自定义对象 * @author wenhua * */
public class ObjectInUser { 
   
	public static void main(String[] args) throws Exception, IOException { 
   
		// 封装文件目录
		FileInputStream inputStream = new FileInputStream("user.txt");
		// 创建反序列化对象流
		ObjectInputStream oin = new ObjectInputStream(inputStream);
		// 接收对象
		User user = (User)oin.readObject();// 注意重写toString方法
		
		System.out.println(user);// User [sum=100, name=tom, age=null, code=null]
		// 关闭资源
		oin.close();
	}
}
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/149649.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • IDEA版本的Mybatis逆向工程使用攻略「建议收藏」

    IDEA版本的Mybatis逆向工程使用攻略「建议收藏」idea版本的Mybatis逆向工程开发(自动生成实体类层,mapper文件,dao层)一、使用逆向工程开发概述今天早上打算做一个spring+springmvc+mybatis的项目,然后感觉这个mapper文件太难写了,最后就想在网上找一个方法能解决不写mapper文件的方法,最后就发现了这个懒人必背法宝:“myabtis逆向工程”的技术,但是全网几乎都是“eclipse版本生成MyBatis逆向工程”,然后自己就搞了一个idea+maven版本的逆向工程,并且全部在gitee开源了的哟,如果

    2022年8月21日
  • pycharm怎么看函数源代码_python查看第三方库的源码

    pycharm怎么看函数源代码_python查看第三方库的源码pycharm查看python源代码

    2022年8月28日
  • 添加config文件_config配置文件

    添加config文件_config配置文件在我们第一次写web应用程序的时候,我们很快会接触到一个文件,那就是配置文件——web.config。我们的第一个比较深刻的使用就是我们不需要把我们的数据库链接零散的写在我们的代码中了,我们只需要在w

    2022年8月3日
  • 什么是IT人力外包?什么情况下选用IT人力外包?

    什么是IT人力外包?什么情况下选用IT人力外包?什么是IT人力外包?什么情况下选用IT人力外包?在IT企业中,在工作中通常涉及的外包业务主要有三类形式,概括来说:(一)项目外包:有明确的项目目标、时间要求、产出交付标准,请有相关资质的乙方公司帮助完成,付费方式通常为按约定的项目阶段、达成的交付产出分期支付,最后在项目上线运行后可能还会留少量比例的尾款,确保项目上线后还能得到乙方的继续支持。(二)业务外包:对于一些例行、重复的工作,明…

    2022年5月19日
  • java rmi与dubbo

    java rmi与dubbo首先得知道什么是分布式,以及和集群的区别?分布式:一个业务分拆成多个子业务,部署在不同的服务器上,多半是为了业务解耦,不同的业务可以分别部署,互不干扰,只在需要时相互调用,提升效率。集群:同一个业务,部署在多个服务器上,多半是为了解决高并发,高访问量,提高系统性能。RMIRMI(RemoteMethodInvocation)即远程方法调用,是java在JDK1.1中实现的一…

    2022年6月16日
  • python微信机器人库_Python微信机器人「建议收藏」

    python微信机器人库_Python微信机器人「建议收藏」1.需要用到的模块:requests:Requests是用Itchat:itchat是一个开源的微信个人号接口,使用python调用微信从未如此简单。使用不到三十行的代码,你就可以完成一个能够处理所有信息的微信机器人。当然,该api的使用远不止一个机器人,更多的功能等着你来发现,比如这些。该接口与公众号接口itchatmp共享类似的操作方式,学习一次掌握两个工具。如今微信已经成为了个人社交的很大…

    2022年6月18日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号