序列化

为君一笑 提交于 2019-12-10 08:04:06

序列化:

就是将内存中的对象转换为字节序列,方便持久化到磁盘或者网络传输。

对象序列化过程可以分为两步:

第一: 将对象转换为字节数组

第二: 将字节数组存储到磁盘

public static byte[] getByteArray4Object(Object obj)throws Exception{
		 
		 ByteArrayOutputStream bao=new ByteArrayOutputStream();
		 ObjectOutputStream os=new ObjectOutputStream(bao);
		 os.writeObject(obj);
		 return bao.toByteArray();
		 
	 }

public static void writeByteArrayToFile(String textFilePath,byte[]bytearr)throws Exception{

		FileOutputStream fos=new FileOutputStream(new File(textFilePath));
		fos.write(bytearr);
	}

反序列化

就是将字节序列转换为内存中的对象

可以是文件中的,也可以是网络传输过来的

对象的序列化和反序列化主要就是使用ObjectOutputStream 和 ObjectInputStream

 对象的序列化主要有两种用途:

  1) 对象持久化:把对象的字节序列永久地保存到硬盘上,通常存放在一个文件中;

  2) 网络传输对象:在网络上传送对象的字节序列。可以通过序列化把主机A进程上的对象序列化为二进制序列,传输到主机B上的进程从序列中重构出该对象。

 // 从文件中反序列化
        FileInputStream fis=new FileInputStream(textFilePath);
       ObjectInputStream ois=new ObjectInputStream(fis);
       User user2= (User) ois.readObject();
      //=========================

     // 字节流中反序列化
         byte[] bytearr=  getByteArray4Object(user);
		
		ByteArrayInputStream bais=new ByteArrayInputStream(bytearr);
		
		ObjectInputStream ois=new ObjectInputStream(bais);
		
		User user2=(User)ois.readObject();

Serializable

Serializable序列化是一对象结构的方式,类只要实现这个接口就可以了,底层不由java实现。是要实现接口,就可以直接将实例对象写入对应的文件中。一般来讲Serializable也是作为一种持久化的存储手段。需要注意的是被transient修饰的变量不能被序列化。

Parcelable

安卓中提供的序列化方式,优点是速度快。主要作为线程进程间通信手段,不能持久化。

基本格式就是这样,顺序写入,顺序读取。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!