通过字节数组流进行的对象序列化操作

时间:2023-01-10 15:13:36

当两个进程在进行远程通信时,彼此可以发送各种类型的数据。无论是何种类型的数据,都会以二进制序列的形式在网络上传送。

发送方需要把这个Java对象转换为字节序列,才能在网络上传送;接收方则需要把字节序列再恢复为Java对象。
把Java对象转换为字节序列的过程称为对象的序列化。把字节序列恢复为Java对象的过程称为对象的反序列化。

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

1) 把对象的字节序列永久地保存到硬盘上,通常存放在一个文件中;
2) 在网络上传送对象的字节序列。


序列化

public static byte[] serilizer(Object object){
//定义内存变量
ByteArrayOutputStream bos=new ByteArrayOutputStream();
try {
ObjectOutputStream oos=new ObjectOutputStream(bos);
oos.writeObject(object);
oos.flush();
oos.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return bos.toByteArray();
}

ByteArrayOutputStream可以捕获内存缓冲区的数据,转换成字节数组。作为输出目的地。正如注释中所说的在这里他就是起到获得内存对象的作用。
本方法将对象写入内存中,转换为内存中的字节数组,并通过return得到


反序列化

public static  Object deserilizer(byte[] bytes){
//定义内存变量
Object obj=null;
try {
ByteArrayInputStream bis=new ByteArrayInputStream(bytes);
ObjectInputStream ois=new ObjectInputStream(bis);
obj=ois.readObject();
ois.close();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return obj;
}

ByteArrayInputStream可以捕获内存缓冲区的数据,转换成字节数组。作为输入流来源。