官术网_书友最值得收藏!

2.3.1 DataInput和DataOutput接口

DataOutput接口定義了下面用于以二進(jìn)制格式寫數(shù)組、字符、boolean值和字符串的方法:

例如,writeInt總是將一個(gè)整數(shù)寫出為4字節(jié)的二進(jìn)制數(shù)量值,而不管它有多少位,writeDouble總是將一個(gè)double值寫出為8字節(jié)的二進(jìn)制數(shù)量值。這樣產(chǎn)生的結(jié)果并非人可閱讀的,但是對(duì)于給定類型的每個(gè)值,所需的空間都是相同的,而且將其讀回也比解析文本要更快。

注意:根據(jù)你所使用的處理器類型,在內(nèi)存存儲(chǔ)整數(shù)和浮點(diǎn)數(shù)有兩種不同的方法。例如,假設(shè)你使用的是4字節(jié)的int,如果有一個(gè)十進(jìn)制數(shù)1234,也就是十六進(jìn)制的4D2(1234=4×256+13×16+2),那么它可以按照內(nèi)存中4字節(jié)的第一個(gè)字節(jié)存儲(chǔ)最高位字節(jié)的方式來(lái)存儲(chǔ)為:00 00 04 D2,這就是所謂的高位在前順序(MSB);我們也可以從最低位字節(jié)開(kāi)始:D2 04 00 00,這種方式自然就是所謂的低位在前順序(LSB)。例如,SPARC使用的是高位在前順序,而Pentium使用的則是低位在前順序。這就可能會(huì)帶來(lái)問(wèn)題,當(dāng)存儲(chǔ)C或者C++文件時(shí),數(shù)據(jù)會(huì)精確地按照處理器存儲(chǔ)它們的方式來(lái)存儲(chǔ),這就使得即使是最簡(jiǎn)單的數(shù)據(jù)在從一個(gè)平臺(tái)遷移到另一個(gè)平臺(tái)上時(shí)也是一種挑戰(zhàn)。在Java中,所有的值都按照高位在前的模式寫出,不管使用何種處理器,這使得Java數(shù)據(jù)文件可以獨(dú)立于平臺(tái)。

writeUTF方法使用修訂版的8位Unicode轉(zhuǎn)換格式寫出字符串。這種方式與直接使用標(biāo)準(zhǔn)的UTF-8編碼方式不同,其中,Unicode碼元序列首先用UTF-16表示,其結(jié)果之后使用UTF-8規(guī)則進(jìn)行編碼。修訂后的編碼方式對(duì)于編碼大于0xFFFF的字符的處理有所不同,這是為了向后兼容在Unicode還沒(méi)有超過(guò)16位時(shí)構(gòu)建的虛擬機(jī)。

因?yàn)闆](méi)有其他方法會(huì)使用UTF-8的這種修訂,所以你應(yīng)該只在寫出用于Java虛擬機(jī)的字符串時(shí)才使用writeUTF方法,例如,當(dāng)你需要編寫一個(gè)生成字節(jié)碼的程序時(shí)。對(duì)于其他場(chǎng)合,都應(yīng)該使用writeChars方法。

為了讀回?cái)?shù)據(jù),可以使用在DataInput接口中定義的下列方法:

DataInputStream類實(shí)現(xiàn)了DataInput接口,為了從文件中讀入二進(jìn)制數(shù)據(jù),可以將DataInputStream與某個(gè)字節(jié)源相組合,例如FileInputStream:

與此類似,要想寫出二進(jìn)制數(shù)據(jù),你可以使用實(shí)現(xiàn)了DataOutput接口的DataOutput-Stream類:

java.io.DataInput 1.0

·boolean readBoolean()

·byte readByte()

·char readChar()

·double readDouble()

·float readFloat()

·int readInt()

·long readLong()

·short readShort()

讀入一個(gè)給定類型的值。

·void readFully(byte[]b)

將字節(jié)讀入到數(shù)組b中,其間阻塞直至所有字節(jié)都讀入。

參數(shù):b 數(shù)據(jù)讀入的緩沖區(qū)

·void readFully(byte[]b,int off,int len)

將字節(jié)讀入到數(shù)組b中,其間阻塞直至所有字節(jié)都讀入。

參數(shù):b 數(shù)據(jù)讀入的緩沖區(qū)

off 數(shù)據(jù)起始位置的偏移量

len 讀入字節(jié)的最大數(shù)量

·String readUTF()

讀入由“修訂過(guò)的UTF-8”格式的字符構(gòu)成的字符串。

·int skipBytes(int n)

跳過(guò)n個(gè)字節(jié),其間阻塞直至所有字節(jié)都被跳過(guò)。

參數(shù):n 被跳過(guò)的字節(jié)數(shù)

java.io.DataOuput 1.0

·void writeBoolean(boolean b)

·void writeByte(int b)

·void writeChar(int c)

·void writeDouble(double d)

·void writeFloat(float f)

·void writeInt(int i)

·void writeLong(long l)

·void writeShort(int s)

寫出一個(gè)給定類型的值。

·void writeChars(String s)

寫出字符串中的所有字符。

·void writeUTF(String s)

寫出由“修訂過(guò)的UTF-8”格式的字符構(gòu)成的字符串。

主站蜘蛛池模板: 城固县| 刚察县| 玛多县| 自贡市| 崇礼县| 建德市| 永寿县| 三台县| 迁西县| 凤山市| 昂仁县| 安国市| 长兴县| 永靖县| 孟连| 昌江| 临湘市| 三河市| 方正县| 家居| 齐齐哈尔市| 高雄市| 朔州市| 玛多县| 洪江市| 孟津县| 同江市| 河西区| 杭州市| 称多县| 体育| 福贡县| 元氏县| 普格县| 南平市| 池州市| 滨海县| 萨嘎县| 三台县| 沭阳县| 芒康县|