天天看點

Java各種資料類型序列化

對象序列化是一個用于将對象狀态轉換為位元組流的過程,可以将其儲存到磁盤檔案中或通過網絡發送到任何其他程式;從位元組流建立對象的相反的過程稱為反序列化。

可以了解為序列化是将資料轉換成

byte[]

的表示方式。

對象序列化

  1. 首先要實作

    Serializable

    接口
  2. 使用

    ObjectOutputStream

    序列化,傳回

    byte[]

    ,使用

    ObjectInputStream

    反序列化

    byte[]

    為對象
  3. 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;