Java的序列化Serilazable
Java的序列化是一個重量級序列化架構(Serializable),一個對象被序列化後,會附帶很多額外的資訊(各種校驗資訊,header,繼承體系等),不便于在網絡中高效傳輸。
hadoop序列化機制Writable
1.緊湊
緊湊的格式能讓我們充分利用網絡帶寬,而帶寬是資料中心最稀缺的資源
2.快速
程序通信形成了分布式系統的骨架,是以需要盡量減少序列化和反序列化的性能開銷,這是基本的;
3.可擴充
協定為了滿足新的需求變化,是以控制用戶端和伺服器過程中,需要直接引進相應的協定,這些是新協定,原序列化方式能支援新的協定封包;
4.互操作
能支援不同語言寫的用戶端和服務端進行互動;
自定義bean對象實作序列化接口(Writable)
自定義bean對象要想序列化傳輸,必須實作序列化接口
(1)必須實作Writable接口
(2)反序列化時,需要反射調用空參構造函數,是以必須有空參構造
public FlowBean() {
super();
}
(3)重寫序列化方法
@Override
public void write(DataOutput out) throws IOException {
out.writeLong(upFlow);
out.writeLong(downFlow);
out.writeLong(sumFlow);
}
(4)重寫反序列化方法
@Override
public void readFields(DataInput in) throws IOException {
upFlow = in.readLong();
downFlow = in.readLong();
sumFlow = in.readLong();
}
(5)注意反序列化的順序和序列化的順序完全一緻