Java各种数据类型序列化

对象序列化是一个用于将对象状态转换为字节流的过程,可以将其保存到磁盘文件中或通过网络发送到任何其他程序;从字节流创建对象的相反的过程称为反序列化。
可以理解为序列化是将数据转换成byte[]的表示方式。

对象序列化


  1. 首先要实现Serializable接口
  2. 使用ObjectOutputStream序列化,返回byte[],使用ObjectInputStream反序列化byte[]为对象
  3. fastjsonjackson等也提供了对象序列化的方式。如果序列化字符串类型,序列化的byte[]数组中会包含引号byte数据,反序列化时要使用正确的方式,否则反序列化可能出现分号
    Java各种数据类型序列化_第1张图片

字符串序列化


  • String#getBytes
String data = "hello world";
byte[] bytes = data.getBytes();

基本数据类型序列化


基本数据类型转byte时,不能强制转换,存在精度损失,因此要转成byte[]

1字节=8byte     1字节               
short    2字节
char     2字节(C语言中是1字节)可以存储一个汉字               
int      4字节               
long     8字节               
float    4字节               
double   8字节               
boolean  false/true(理论上占用1bit,1/8字节,实际处理按1byte处理)

intbyte[]为例,int占4字节,byte占1字节,intbyte实际上是将4字节压缩成4个byte类型,因此用byte[]来存储int类型

// int 转 byte[]
bytes[0] = (byte)(i >> 24 & 0xFF);
bytes[1] = (byte)(i >> 16 & 0xFF);
bytes[2] = (byte)(i >> 8 & 0xFF);
bytes[3] = (byte)(i & 0xFF);
// byte[] 转 int
int b0 = bytes[0] & 0xFF;
int b1 = bytes[1] & 0xFF;
int b2 = bytes[2] & 0xFF;
int b3 = bytes[3] & 0xFF;
return (b0 << 24) | (b1 << 16) | (b2 << 8) | b3;

你可能感兴趣的:(序列化,基本数据类型转byte[],java人生,java实战案例)