序列化:
就是将内存中的对象转换为字节序列,方便持久化到磁盘或者网络传输。
对象序列化过程可以分为两步:
第一: 将对象转换为字节数组
第二: 将字节数组存储到磁盘
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
安卓中提供的序列化方式,优点是速度快。主要作为线程进程间通信手段,不能持久化。
基本格式就是这样,顺序写入,顺序读取。
来源:CSDN
作者:李与屡
链接:https://blog.csdn.net/qq_42300133/article/details/103464325