對(duì)象輸出流和對(duì)象輸入流可以為應(yīng)用提供對(duì)象持久化的功能,分別調(diào)用文件輸出流和文件輸入流來實(shí)現(xiàn)。另一種使用對(duì)象流的場景是,在不同主機(jī)用socket流在遠(yuǎn)程通信系統(tǒng)中傳遞傳遞數(shù)據(jù)。
1.ObjectInputStream
對(duì)象輸入流是用來恢復(fù)之前序列化存儲(chǔ)的對(duì)象,對(duì)象輸入流可以確保每次從流中讀取的對(duì)象能匹配Java虛擬機(jī)中已經(jīng)存在的類,根據(jù)需求使用標(biāo)準(zhǔn)機(jī)制加載類。另外只有支持Serializable或者Externalizable接口的類可以從流中讀取出來。對(duì)象輸入流繼承了InputStream中字節(jié)讀取方法,具體點(diǎn)擊這里;另外有一些常用的方法:
boolean readBoolean()
讀出布爾類型數(shù)據(jù)
byte readByte()
讀取一個(gè)8比特字節(jié)
char readChar()
讀取一個(gè)16比特的字符
double readDouble()
讀取一個(gè)64比特的double類型數(shù)據(jù)
float readFloat()
讀取一個(gè)32比特的float類型數(shù)據(jù)
void readFully(byte[] buf)
將流中所有的字節(jié)讀取到buf字節(jié)數(shù)組中
void readFully(byte[] buf, int off, int len)
從流中讀取len個(gè)字節(jié)數(shù)據(jù)到buf中,第一個(gè)字節(jié)存放在buf[off],第二個(gè)字節(jié)存放在buf[off+1],以此類推
int readInt()
讀取一個(gè)32比特的int類型數(shù)據(jù)
long readLong()
讀取一個(gè)64比特的long類型數(shù)據(jù)
Object readObject()
從流中讀取一個(gè)對(duì)象數(shù)據(jù),包括對(duì)象所屬的類,該類的簽名,類中非瞬態(tài)和非靜態(tài)的字段值以及所有非超類型的字段值
short readShort()
讀取一個(gè)16比特的short類型數(shù)據(jù)
int readUnsignedByte()
讀取一個(gè)非負(fù)的8比特字節(jié),轉(zhuǎn)換為int類型返回
int readUnsignedShort()
讀取非負(fù)的16比特的short類型數(shù)據(jù),轉(zhuǎn)換為int類型返回
String readUTF()
讀取一個(gè)按UTF-8編碼的String類型的數(shù)據(jù)
2.ObjectOutputStream
對(duì)象輸出流用來持久化對(duì)象的,可以將對(duì)象數(shù)據(jù)寫入到文件,如果流是網(wǎng)絡(luò)流,則可以將對(duì)象傳輸給其他用戶進(jìn)行通信。只有支持Serializable接口的對(duì)象支持寫入到流,每個(gè)序列化對(duì)象被編碼,包括類的名稱和類的簽名,以及類的對(duì)象中的字段值,以及arrays變量,以及從初始化對(duì)象引用的任何其他對(duì)象的閉包。
對(duì)象輸出流繼承了OutputStream中字節(jié)寫的方法,具體點(diǎn)擊這里;另外常用的方法有:
void writeBoolean(boolean val)
寫一個(gè)布爾類型數(shù)據(jù)
void writeByte(int val)
寫一個(gè)8比特字節(jié)數(shù)據(jù),int類型只截取第8位
void writeBytes(String str)
將一個(gè)字符串?dāng)?shù)據(jù)當(dāng)作一個(gè)字節(jié)序列寫入流中
void writeChar(int val)
寫入一個(gè)16比特的字符數(shù)據(jù),參數(shù)為int,只截取低16位
void writeChars(String str)
將一個(gè)字符串?dāng)?shù)據(jù)當(dāng)作一個(gè)字符序列寫入
void writeDouble(double val)
寫入一個(gè)64比特的double類型數(shù)據(jù)
void writeFloat(float val)
寫入一個(gè)32比特的float類型數(shù)據(jù)
void writeLong(long val)
寫入一個(gè)64比特的long類型數(shù)據(jù)
void writeObject(Object obj)
將一個(gè)對(duì)象寫入到流中,包括類的名稱和類的簽名,以及類的對(duì)象中的字段值,
以及arrays變量,以及從初始化對(duì)象引用的任何其他對(duì)象的閉包。
void writeShort(int val)
將一個(gè)16比特的short類型數(shù)據(jù)寫入到流中
void writeUTF(String str)
將一個(gè)按UTF-8編碼的字符串?dāng)?shù)據(jù)寫入到流中
3.例子
分別以讀寫對(duì)象為例子。定義了一個(gè)Person類,用來測試讀寫對(duì)象,然后分別建立了兩個(gè)java項(xiàng)目,一個(gè)用來寫對(duì)象,一個(gè)用來讀對(duì)象;兩個(gè)java工程都應(yīng)該包括Person對(duì)象的定義,要保證兩個(gè)工程中Person的包名和類名都一致,代碼如下:
Person類代碼:
寫對(duì)象java代碼:
讀對(duì)象java代碼:
運(yùn)行結(jié)果截圖為:
廣州天河區(qū)珠江新城富力盈力大廈北塔2706
020-38013166(網(wǎng)站咨詢專線)
400-001-5281 (售后服務(wù)熱線)
深圳市坂田十二橡樹莊園F1-7棟
Site/ http://www.szciya.com
E-mail/ itciya@vip.163.com
品牌服務(wù)專線:400-001-5281
長沙市天心區(qū)芙蓉中路三段398號(hào)新時(shí)空大廈5樓
聯(lián)系電話/ (+86 0731)88282200
品牌服務(wù)專線/ 400-966-8830
旗下運(yùn)營網(wǎng)站:
Copyright ? 2016 廣州思洋文化傳播有限公司,保留所有權(quán)利。 粵ICP備09033321號(hào)