對象序列化是一個用于将對象狀态轉換為位元組流的過程,可以将其儲存到磁盤檔案中或通過網絡發送到任何其他程式;從位元組流建立對象的相反的過程稱為反序列化。
可以了解為序列化是将資料轉換成
byte[]
的表示方式。
對象序列化
- 首先要實作
接口Serializable
- 使用
序列化,傳回ObjectOutputStream
,使用byte[]
反序列化ObjectInputStream
為對象byte[]
-
、fastjson
等也提供了對象序列化的方式。如果序列化字元串類型,序列化的jackson
數組中會包含引号的byte[]
資料,反序列化時要使用正确的方式,否則反序列化可能出現分号byte
Java各種資料類型序列化
字元串序列化
-
String#getBytes
String data = "hello world";
byte[] bytes = data.getBytes();
基本資料類型序列化
基本資料類型轉
byte
時,不能強制轉換,存在精度損失,是以要轉成
byte[]
1位元組=8位
byte 1位元組
short 2位元組
char 2位元組(C語言中是1位元組)可以存儲一個漢字
int 4位元組
long 8位元組
float 4位元組
double 8位元組
boolean false/true(理論上占用1bit,1/8位元組,實際處理按1byte處理)
以
int
轉
byte[]
為例,
int
占4位元組,
byte
占1位元組,
int
轉
byte
實際上是将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;