- Java核心技術(shù)·卷Ⅱ:高級(jí)特性(原書第10版)
- (美)凱S.霍斯特曼
- 1130字
- 2020-10-30 18:10:40
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)成的字符串。
- Web程序設(shè)計(jì)及應(yīng)用
- SPSS數(shù)據(jù)挖掘與案例分析應(yīng)用實(shí)踐
- 控糖控脂健康餐
- Mastering QGIS
- 實(shí)戰(zhàn)Java程序設(shè)計(jì)
- C語(yǔ)言程序設(shè)計(jì)實(shí)踐教程
- 深度強(qiáng)化學(xué)習(xí)算法與實(shí)踐:基于PyTorch的實(shí)現(xiàn)
- PHP+MySQL網(wǎng)站開(kāi)發(fā)項(xiàng)目式教程
- Java EE 8 Application Development
- Python High Performance Programming
- Bootstrap for Rails
- UX Design for Mobile
- Instant Automapper
- Robot Framework Test Automation
- Web前端開(kāi)發(fā)技術(shù):HTML、CSS、JavaScript