日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
創(chuàng)新互聯(lián)鴻蒙OS教程:鴻蒙OS ObjectInputStream

ObjectInputStream

java.lang.Object

|---java.io.InputStream

|---|---java.io.ObjectInputStream

public class ObjectInputStream
extends InputStream
implements ObjectInput, ObjectStreamConstants

ObjectInputStream 反序列化以前使用 ObjectOutputStream 編寫的原始數(shù)據(jù)和對(duì)象。

當(dāng)分別與 FileOutputStream 和 FileInputStream 一起使用時(shí),ObjectOutputStream 和 ObjectInputStream 可以為應(yīng)用程序提供對(duì)象圖的持久存儲(chǔ)。 ObjectInputStream 用于恢復(fù)之前序列化的那些對(duì)象。 其他用途包括使用套接字流在主機(jī)之間傳遞對(duì)象或在遠(yuǎn)程通信系統(tǒng)中編組和解組參數(shù)和參數(shù)。

ObjectInputStream 確保從流創(chuàng)建的圖中所有對(duì)象的類型與 Java 虛擬機(jī)中存在的類匹配。 使用標(biāo)準(zhǔn)機(jī)制根據(jù)需要加載類。

只有支持 java.io.Serializable 或 java.io.Externalizable 接口的對(duì)象才能從流中讀取。

readObject 方法用于從流中讀取對(duì)象。 應(yīng)該使用 Java 的安全轉(zhuǎn)換來獲得所需的類型。 在 Java 中,字符串和數(shù)組是對(duì)象,在序列化過程中被視為對(duì)象。 讀取時(shí)需要將它們轉(zhuǎn)換為預(yù)期的類型。

可以使用 DataInput 上的適當(dāng)方法從流中讀取原始數(shù)據(jù)類型。

對(duì)象的默認(rèn)反序列化機(jī)制將每個(gè)字段的內(nèi)容恢復(fù)為寫入時(shí)的值和類型。反序列化過程會(huì)忽略聲明為瞬態(tài)或靜態(tài)的字段。對(duì)其他對(duì)象的引用會(huì)導(dǎo)致根據(jù)需要從流中讀取這些對(duì)象。使用參考共享機(jī)制正確恢復(fù)對(duì)象圖。反序列化時(shí)總是分配新對(duì)象,這樣可以防止現(xiàn)有對(duì)象被覆蓋。

讀取對(duì)象類似于運(yùn)行新對(duì)象的構(gòu)造函數(shù)。為對(duì)象分配內(nèi)存并初始化為零 (NULL)。為不可序列化類調(diào)用無參數(shù)構(gòu)造函數(shù),然后從流中恢復(fù)可序列化類的字段,從最接近 java.lang.object 的可序列化類開始,到對(duì)象最具體的類結(jié)束。

例如,從 ObjectOutputStream 中的示例編寫的流中讀取:

      FileInputStream fis = new FileInputStream("t.tmp");
      ObjectInputStream ois = new ObjectInputStream(fis);


      int i = ois.readInt();
      String today = (String) ois.readObject();
      Date date = (Date) ois.readObject();


      ois.close();

類通過實(shí)現(xiàn) java.io.Serializable 或 java.io.Externalizable 接口來控制它們的序列化方式。

實(shí)現(xiàn) Serializable 接口允許對(duì)象序列化保存和恢復(fù)對(duì)象的整個(gè)狀態(tài),它允許類在寫入流和讀取流之間演變。 它自動(dòng)遍歷對(duì)象之間的引用,保存和恢復(fù)整個(gè)圖形。

在序列化和反序列化過程中需要特殊處理的可序列化類應(yīng)實(shí)現(xiàn)以下方法:

 private void writeObject(java.io.ObjectOutputStream stream)
     throws IOException;
 private void readObject(java.io.ObjectInputStream stream)
     throws IOException, ClassNotFoundException;
 private void readObjectNoData()
     throws ObjectStreamException;

readObject 方法負(fù)責(zé)使用由相應(yīng)的 writeObject 方法寫入流的數(shù)據(jù)讀取和恢復(fù)其特定類的對(duì)象狀態(tài)。該方法不需要關(guān)注屬于其超類或子類的狀態(tài)。通過從 ObjectInputStream 讀取各個(gè)字段的數(shù)據(jù)并對(duì)對(duì)象的適當(dāng)字段進(jìn)行分配來恢復(fù)狀態(tài)。 DataInput 支持讀取原始數(shù)據(jù)類型。

任何超出相應(yīng) writeObject 方法寫入的自定義數(shù)據(jù)邊界的對(duì)象數(shù)據(jù)的讀取嘗試都將導(dǎo)致拋出 OptionalDataException,并且 eof 字段值為 true。超過分配數(shù)據(jù)結(jié)尾的非對(duì)象讀取將反映數(shù)據(jù)的結(jié)尾,就像它們指示流的結(jié)尾一樣:按字節(jié)讀取將返回 -1 作為字節(jié)讀取或讀取的字節(jié)數(shù),以及原始讀取將拋出 EOFExceptions。如果沒有對(duì)應(yīng)的 writeObject 方法,則默認(rèn)序列化數(shù)據(jù)的結(jié)尾標(biāo)志著分配數(shù)據(jù)的結(jié)尾。

從 readExternal 方法中發(fā)出的原始和對(duì)象讀取調(diào)用的行為方式相同 - 如果流已經(jīng)位于相應(yīng) writeExternal 方法寫入的數(shù)據(jù)的末尾,則對(duì)象讀取將拋出 OptionalDataExceptions 并將 eof 設(shè)置為 true,按字節(jié)讀取將返回 -1,原始讀取將拋出 EOFExceptions。請(qǐng)注意,此行為不適用于使用舊的 ObjectStreamConstants.PROTOCOL_VERSION_1 協(xié)議編寫的流,其中 writeExternal 方法寫入的數(shù)據(jù)的結(jié)尾未劃分,因此無法檢測(cè)到。

如果序列化流未將給定類列為被反序列化對(duì)象的超類,readObjectNoData 方法負(fù)責(zé)為其特定類初始化對(duì)象的狀態(tài)。這可能發(fā)生在接收方使用與發(fā)送方不同版本的反序列化實(shí)例類的情況下,并且接收方的版本擴(kuò)展了發(fā)送方版本未擴(kuò)展的類。如果序列化流已被篡改,也可能發(fā)生這種情況;因此,盡管存在“敵對(duì)”或不完整的源流,但 readObjectNoData 對(duì)于正確初始化反序列化對(duì)象很有用。

序列化不會(huì)讀取或賦值給任何未實(shí)現(xiàn) java.io.Serializable 接口的對(duì)象的字段。不可序列化的對(duì)象的子類可以是可序列化的。在這種情況下,不可序列化的類必須有一個(gè)無參數(shù)的構(gòu)造函數(shù)來允許其字段被初始化。在這種情況下,子類負(fù)責(zé)保存和恢復(fù)不可序列化類的狀態(tài)。通常情況下,該類的字段是可訪問的(公共的、包的或受保護(hù)的),或者存在可用于恢復(fù)狀態(tài)的 get 和 set 方法。

反序列化對(duì)象時(shí)發(fā)生的任何異常都將被 ObjectInputStream 捕獲并中止讀取過程。

實(shí)現(xiàn) Externalizable 接口允許對(duì)象完全控制對(duì)象序列化形式的內(nèi)容和格式。調(diào)用 Externalizable 接口的方法 writeExternal 和 readExternal 來保存和恢復(fù)對(duì)象狀態(tài)。當(dāng)由一個(gè)類實(shí)現(xiàn)時(shí),它們可以使用 ObjectOutput 和 ObjectInput 的所有方法寫入和讀取自己的狀態(tài)。對(duì)象負(fù)責(zé)處理發(fā)生的任何版本控制。

枚舉常量的反序列化方式與普通可序列化或可外部化對(duì)象不同。枚舉常量的序列化形式僅由其名稱組成;不傳輸常量的字段值。為了反序列化一個(gè)枚舉常量,ObjectInputStream 從流中讀取常量名;然后通過使用枚舉常量的基類型和接收的常量名稱作為參數(shù)調(diào)用靜態(tài)方法 Enum.valueOf(Class, String) 來獲得反序列化的常量。與其他可序列化或可外部化的對(duì)象一樣,枚舉常量可以充當(dāng)隨后出現(xiàn)在序列化流中的反向引用的目標(biāo)。無法自定義枚舉常量的反序列化過程:在反序列化過程中,將忽略枚舉類型定義的任何特定于類的 readObject、readObjectNoData 和 readResolve 方法。同樣,任何 serialPersistentFields 或 serialVersionUID 字段聲明也將被忽略——所有枚舉類型都有一個(gè)固定的 serialVersionUID 為 0L。

Since:

JDK1.1

嵌套類摘要

修飾符和類型描述
static classObjectInputStream.GetField提供對(duì)從輸入流中讀取的持久字段的訪問。

字段摘要

從接口 java.io.ObjectStreamConstants 繼承的字段
baseWireHandle, PROTOCOL_VERSION_1, PROTOCOL_VERSION_2, SC_BLOCK_DATA, SC_ENUM, SC_EXTERNALIZABLE, SC_SERIALIZABLE, SC_WRITE_METHOD, STREAM_MAGIC, STREAM_VERSION, SUBCLASS_IMPLEMENTATION_PERMISSION, SUBSTITUTION_PERMISSION, TC_ARRAY, TC_BASE, TC_BLOCKDATA, TC_BLOCKDATALONG, TC_CLASS, TC_CLASSDESC, TC_ENDBLOCKDATA, TC_ENUM, TC_EXCEPTION, TC_LONGSTRING, TC_MAX, TC_NULL, TC_OBJECT, TC_PROXYCLASSDESC, TC_REFERENCE, TC_RESET, TC_STRING

構(gòu)造函數(shù)摘要

修飾符構(gòu)造函數(shù)描述
protectedObjectInputStream()為完全重新實(shí)現(xiàn) ObjectInputStream 的子類提供一種方法,使其不必分配剛剛由 ObjectInputStream 的實(shí)現(xiàn)使用的私有數(shù)據(jù)。
ObjectInputStream(InputStream in)創(chuàng)建一個(gè)從指定 InputStream 讀取的 ObjectInputStream。

方法總結(jié)

修飾符和類型方法描述
intavailable()返回可以在不阻塞的情況下讀取的字節(jié)數(shù)。
voidclose()關(guān)閉輸入流。
voiddefaultReadObject()從此流中讀取當(dāng)前類的非靜態(tài)和非瞬態(tài)字段。
protected booleanenableResolveObject(boolean enable)啟用流以允許替換從流中讀取的對(duì)象。
intread()讀取一個(gè)字節(jié)的數(shù)據(jù)。
intread(byte[] buf, int off, int len)讀入一個(gè)字節(jié)數(shù)組。
booleanreadBoolean()以布爾值讀取。
bytereadByte()讀取一個(gè) 8 位字節(jié)。
charreadChar()讀取 16 位字符。
protected ObjectStreamClassreadClassDescriptor()從序列化流中讀取類描述符。
doublereadDouble()讀取 64 位雙精度。
ObjectInputStream.GetFieldreadFields()從流中讀取持久字段并通過名稱使它們可用。
floatreadFloat()讀取 32 位浮點(diǎn)數(shù)。
voidreadFully(byte[] buf)讀取字節(jié),阻塞直到讀取所有字節(jié)。
voidreadFully(byte[] buf, int off, int len)讀取字節(jié),阻塞直到讀取所有字節(jié)。
intreadInt()讀取 32 位整數(shù)。
StringreadLine()已棄用。 此方法不能正確地將字節(jié)轉(zhuǎn)換為字符。
longreadLong()讀取 64 位長。
ObjectreadObject()從 ObjectInputStream 中讀取一個(gè)對(duì)象。
protected ObjectreadObjectOverride()此方法由使用受保護(hù)的無參數(shù)構(gòu)造函數(shù)構(gòu)造 ObjectOutputStream 的 ObjectOutputStream 的受信任子類調(diào)用。
shortreadShort()讀取 16 位短。
protected voidreadStreamHeader()提供 readStreamHeader 方法是為了允許子類讀取和驗(yàn)證它們自己的流標(biāo)頭。
ObjectreadUnshared()從 ObjectInputStream 中讀取一個(gè)“非共享”對(duì)象。
intreadUnsignedByte()讀取一個(gè)無符號(hào)的 8 位字節(jié)。
intreadUnsignedShort()讀取無符號(hào) 16 位短。
StringreadUTF()以修改后的 UTF-8 格式讀取字符串。
voidregisterValidation(ObjectInputValidation obj, int prio)在返回圖之前注冊(cè)一個(gè)要驗(yàn)證的對(duì)象。
protected ClassresolveClass(ObjectStreamClass desc)加載指定流類描述的本地類等價(jià)物。
protected ObjectresolveObject(Object obj)此方法將允許 ObjectInputStream 的受信任子類在反序列化期間用一個(gè)對(duì)象替換另一個(gè)對(duì)象。
protected ClassresolveProxyClass(String[] interfaces)返回實(shí)現(xiàn)代理類描述符中命名的接口的代理類; 子類可以實(shí)現(xiàn)此方法以從流中讀取自定義數(shù)據(jù)以及動(dòng)態(tài)代理類的描述符,從而允許它們?yōu)榻涌诤痛眍愂褂脗溆眉虞d機(jī)制。
intskipBytes(int len)跳過字節(jié)。
從類 java.io.InputStream 繼承的方法
mark, markSupported, read, reset, skip
從類 java.lang.Object 繼承的方法
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
從接口 java.io.ObjectInput 繼承的方法
read, skip

構(gòu)造函數(shù)詳細(xì)信息

ObjectInputStream

public ObjectInputStream(InputStream in) throws IOException

創(chuàng)建一個(gè)從指定 InputStream 讀取的 ObjectInputStream。 從流中讀取序列化流標(biāo)頭并進(jìn)行驗(yàn)證。 此構(gòu)造函數(shù)將阻塞,直到相應(yīng)的 ObjectOutputStream 已寫入并刷新標(biāo)頭。

如果安裝了安全管理器,則此構(gòu)造函數(shù)將在由覆蓋 ObjectInputStream.readFields 或 ObjectInputStream.readUnshared 方法的子類的構(gòu)造函數(shù)直接或間接調(diào)用時(shí)檢查“enableSubclassImplementation”SerializablePermission。

參數(shù):

參數(shù)名稱參數(shù)描述
in要讀取的輸入流

Throws:

Throw名稱Throw描述
StreamCorruptedException如果流標(biāo)頭不正確
IOException如果在讀取流標(biāo)頭時(shí)發(fā)生 I/O 錯(cuò)誤
SecurityException如果不受信任的子類非法覆蓋安全敏感方法
NullPointerException如果 in 為空

ObjectInputStream

protected ObjectInputStream() throws IOException, SecurityException

為完全重新實(shí)現(xiàn) ObjectInputStream 的子類提供一種方法,使其不必分配剛剛由 ObjectInputStream 的實(shí)現(xiàn)使用的私有數(shù)據(jù)。

如果安裝了安全管理器,此方法首先調(diào)用安全管理器的 checkPermission 方法,并帶有 SerializablePermission("enableSubclassImplementation") 權(quán)限,以確??梢詥⒂米宇惢?。

Throws:

Throw名稱Throw描述
SecurityException如果存在安全管理器并且其 checkPermission 方法拒絕啟用子類化。
IOException如果在創(chuàng)建此流時(shí)發(fā)生 I/O 錯(cuò)誤

方法詳情

readObject

public final Object readObject() throws ClassNotFoundException, IOException

從 ObjectInputStream 中讀取一個(gè)對(duì)象。讀取對(duì)象的類、類的簽名以及類及其所有超類型的非瞬態(tài)和非靜態(tài)字段的值??梢允褂?writeObject 和 readObject 方法覆蓋類的默認(rèn)反序列化。此對(duì)象引用的對(duì)象被傳遞讀取,以便通過 readObject 重建對(duì)象的完整等效圖。

當(dāng)根對(duì)象的所有字段和它引用的對(duì)象完全恢復(fù)時(shí),根對(duì)象將完全恢復(fù)。此時(shí),對(duì)象驗(yàn)證回調(diào)將根據(jù)其注冊(cè)的優(yōu)先級(jí)按順序執(zhí)行?;卣{(diào)由對(duì)象注冊(cè)(在 readObject 特殊方法中),因?yàn)樗鼈兪菃为?dú)恢復(fù)的。

對(duì)于 InputStream 的問題和不應(yīng)反序列化的類會(huì)引發(fā)異常。所有異常對(duì) InputStream 來說都是致命的,并使其處于不確定狀態(tài);由調(diào)用者忽略或恢復(fù)流狀態(tài)。

指定者:

接口 ObjectInput 中的 readObject

返回:

從流中讀取的對(duì)象

Throws:

Throw名稱Throw描述
ClassNotFoundException找不到序列化對(duì)象的類。
InvalidClassException序列化使用的類有問題。
StreamCorruptedException流中的控制信息不一致。
OptionalDataException在流中找到原始數(shù)據(jù)而不是對(duì)象。
IOException任何常見的輸入/輸出相關(guān)異常。

readObjectOverride

protected Object readObjectOverride() throws ClassNotFoundException, IOException

此方法由使用受保護(hù)的無參數(shù)構(gòu)造函數(shù)構(gòu)造 ObjectOutputStream 的 ObjectOutputStream 的受信任子類調(diào)用。 子類應(yīng)提供帶有修飾符“final”的覆蓋方法。

返回:

從流中讀取的對(duì)象。

Throws:

Throw名稱Throw描述
ClassNotFoundException找不到序列化對(duì)象的類定義。
OptionalDataException在流中找到原始數(shù)據(jù)而不是對(duì)象。
IOException如果從底層流讀取時(shí)發(fā)生 I/O 錯(cuò)誤

Since:

1.2

readUnshared

public Object readUnshared() throws ClassNotFoundException, IOException

從 ObjectInputStream 中讀取一個(gè)“非共享”對(duì)象。 此方法與 readObject 相同,只是它阻止對(duì) readObject 和 readUnshared 的后續(xù)調(diào)用返回對(duì)通過此調(diào)用獲得的反序列化實(shí)例的附加引用。 具體來說:

  • 如果調(diào)用 readUnshared 來反序列化反向引用(之前已寫入流的對(duì)象的流表示),將拋出 ObjectStreamException。
  • 如果 readUnshared 成功返回,則任何后續(xù)嘗試反序列化對(duì)由 readUnshared 反序列化的流句柄的反向引用將導(dǎo)致拋出 ObjectStreamException。

通過 readUnshared 反序列化對(duì)象會(huì)使與返回對(duì)象關(guān)聯(lián)的流句柄無效。請(qǐng)注意,這本身并不總是保證 readUnshared 返回的引用是唯一的;反序列化的對(duì)象可以定義一個(gè) readResolve 方法,該方法返回一個(gè)對(duì)其他方可見的對(duì)象,或者 readUnshared 可以返回一個(gè) Class 對(duì)象或枚舉常量,可在流中的其他地方或通過外部方式獲得。如果反序列化的對(duì)象定義了一個(gè) readResolve 方法并且該方法的調(diào)用返回一個(gè)數(shù)組,那么 readUnshared 返回該數(shù)組的一個(gè)淺克??;這保證了返回的數(shù)組對(duì)象是唯一的,并且不能從 ObjectInputStream 上的 readObject 或 readUnshared 調(diào)用第二次獲得,即使底層數(shù)據(jù)流已被操作。

覆蓋此方法的 ObjectInputStream 子類只能在擁有“enableSubclassImplementation”SerializablePermission 的安全上下文中構(gòu)造;任何嘗試在沒有此權(quán)限的情況下實(shí)例化此類子類都將導(dǎo)致拋出 SecurityException。

返回:

對(duì)反序列化對(duì)象的引用

Throws:

Throw名稱Throw描述
ClassNotFoundException如果找不到要反序列化的對(duì)象的類
StreamCorruptedException如果流中的控制信息不一致
ObjectStreamException如果要反序列化的對(duì)象已經(jīng)出現(xiàn)在流中
OptionalDataException如果原始數(shù)據(jù)是流中的下一個(gè)
IOException如果在反序列化過程中發(fā)生 I/O 錯(cuò)誤

Since:

1.4

defaultReadObject

public void defaultReadObject() throws ClassNotFoundException, IOException

從此流中讀取當(dāng)前類的非靜態(tài)和非瞬態(tài)字段。 這只能從被反序列化的類的 readObject 方法中調(diào)用。 如果以其他方式調(diào)用它將拋出 NotActiveException。

Throws:

Throw名稱Throw描述
ClassNotFoundException如果找不到序列化對(duì)象的類。
IOException如果發(fā)生 I/O 錯(cuò)誤。
NotActiveException如果流當(dāng)前沒有讀取對(duì)象。

readFields

public ObjectInputStream.GetField readFields() throws ClassNotFoundException, IOException

從流中讀取持久字段并通過名稱使它們可用。

返回:

表示正在反序列化的對(duì)象的持久字段的 GetField 對(duì)象

Throws:

Throw名稱Throw描述
ClassNotFoundException如果找不到序列化對(duì)象的類。
IOException如果發(fā)生 I/O 錯(cuò)誤。
NotActiveException如果流當(dāng)前沒有讀取對(duì)象。

Since:

1.2

registerValidation

public void registerValidation(ObjectInputValidation obj, int prio) throws InvalidObjectException, NotActiveException

在返回圖之前注冊(cè)一個(gè)要驗(yàn)證的對(duì)象。 雖然與 resolveObject 類似,但這些驗(yàn)證是在整個(gè)圖重構(gòu)后調(diào)用的。 通常,readObject 方法會(huì)將對(duì)象注冊(cè)到流中,以便在恢復(fù)所有對(duì)象時(shí)可以執(zhí)行最終的一組驗(yàn)證。

參數(shù):

參數(shù)名稱參數(shù)描述
obj接收驗(yàn)證回調(diào)的對(duì)象。
prio控制回調(diào)的順序;零是一個(gè)很好的默認(rèn)值。 使用較大的數(shù)字更早地回調(diào),較低的數(shù)字用于以后的回調(diào)。 在一個(gè)優(yōu)先級(jí)中,回調(diào)的處理沒有特定的順序。

Throws:

Throw名稱Throw描述
NotActiveException流當(dāng)前未讀取對(duì)象,因此注冊(cè)回調(diào)無效。
InvalidObjectException驗(yàn)證對(duì)象為空。

resolveClass

protected Class resolveClass(ObjectStreamClass desc) throws ClassNotFoundException, IOException

加載指定流類描述的本地類等價(jià)物。 子類可以實(shí)現(xiàn)此方法以允許從備用源獲取類。

ObjectOutputStream 中對(duì)應(yīng)的方法是annotateClass。 對(duì)于流中的每個(gè)唯一類,該方法只會(huì)被調(diào)用一次。 此方法可由子類實(shí)現(xiàn)以使用備用加載機(jī)制,但必須返回 Class 對(duì)象。 一旦返回,如果該類不是數(shù)組類,則將其serialVersionUID與序列化類的serialVersionUID進(jìn)行比較,如果不匹配,則反序列化失敗并拋出InvalidClassException。

ObjectInputStream中該方法的默認(rèn)實(shí)現(xiàn)返回調(diào)用的結(jié)果

     Class.forName(desc.getName(), false, loader)

其中 loader 確定如下:如果當(dāng)前線程的堆棧上有一個(gè)方法,其聲明類是由用戶定義的類加載器定義的(并且不是為實(shí)現(xiàn)反射調(diào)用而生成的),則 loader 是對(duì)應(yīng)于最近的類加載器 這種方法對(duì)當(dāng)前執(zhí)行的幀; 否則,加載程序?yàn)榭铡?如果此調(diào)用導(dǎo)致 ClassNotFoundException 并且傳遞的 ObjectStreamClass 實(shí)例的名稱是原始類型或 void 的 Java 語言關(guān)鍵字,則將返回表示該原始類型或 void 的 Class 對(duì)象(例如,名稱為“int”的 ObjectStreamClass " 將被解析為 Integer.TYPE)。 否則,ClassNotFoundException 將被拋出給該方法的調(diào)用者。

參數(shù):

參數(shù)名稱參數(shù)描述
descObjectStreamClass 類的實(shí)例

返回:

對(duì)應(yīng)于 desc 的 Class 對(duì)象

Throws:

Throw名稱Throw描述
IOException任何常見的輸入/輸出異常。
ClassNotFoundException如果找不到序列化對(duì)象的類。

resolveProxyClass

protected Class resolveProxyClass(String[] interfaces) throws ClassNotFoundException, IOException

返回實(shí)現(xiàn)代理類描述符中命名的接口的代理類; 子類可以實(shí)現(xiàn)此方法以從流中讀取自定義數(shù)據(jù)以及動(dòng)態(tài)代理類的描述符,從而允許它們?yōu)榻涌诤痛眍愂褂脗溆眉虞d機(jī)制。

對(duì)于流中的每個(gè)唯一代理類描述符,該方法只調(diào)用一次。

ObjectOutputStream 中對(duì)應(yīng)的方法是annotateProxyClass。 對(duì)于覆蓋此方法的給定 ObjectInputStream 子類,ObjectOutputStream 相應(yīng)子類中的 annotateProxyClass 方法必須寫入此方法讀取的任何數(shù)據(jù)或?qū)ο蟆?/p>

ObjectInputStream 中此方法的默認(rèn)實(shí)現(xiàn)返回調(diào)用 Proxy.getProxyClass 的結(jié)果,其中包含接口參數(shù)中命名的接口的 Class 對(duì)象列表。 每個(gè)接口名稱 i 的 Class 對(duì)象是調(diào)用返回的值

     Class.forName(i, false, loader)

其中 loader 是執(zhí)行堆棧上第一個(gè)非空類加載器的加載器,如果堆棧上沒有非空類加載器(與 resolveClass 方法使用的類加載器選擇相同),則為 null。 除非任何已解析的接口是非公開的,否則 loader 的相同值也是傳遞給 Proxy.getProxyClass 的類加載器; 如果存在非公共接口,則傳遞它們的類加載器(如果遇到多個(gè)非公共接口類加載器,則拋出 IllegalAccessError)。 如果 Proxy.getProxyClass 引發(fā) IllegalArgumentException,resolveProxyClass 將引發(fā)包含 IllegalArgumentException 的 ClassNotFoundException。

參數(shù):

參數(shù)名稱參數(shù)描述
interfaces在代理類描述符中反序列化的接口名稱列表

返回:

指定接口的代理類

Throws:

Throw名稱Throw描述
IOException底層 InputStream 拋出的任何異常
ClassNotFoundException如果找不到代理類或任何命名接口

Since:

1.3

resolveObject

protected Object resolveObject(Object obj) throws IOException

此方法將允許 ObjectInputStream 的受信任子類在反序列化期間用一個(gè)對(duì)象替換另一個(gè)對(duì)象。在調(diào)用 enableResolveObject 之前,禁用替換對(duì)象。 enableResolveObject 方法檢查請(qǐng)求解析對(duì)象的流是否可信。每個(gè)對(duì)可序列化對(duì)象的引用都會(huì)傳遞給 resolveObject。為了確保對(duì)象的私有狀態(tài)不會(huì)無意暴露,只有受信任的流可以使用 resolveObject。

在讀取對(duì)象之后但在從 readObject 返回之前調(diào)用此方法。默認(rèn)的 resolveObject 方法只返回相同的對(duì)象。

當(dāng)子類替換對(duì)象時(shí),它必須確保被替換的對(duì)象與將存儲(chǔ)引用的每個(gè)字段兼容。類型不是字段或數(shù)組元素類型的子類的對(duì)象通過引發(fā)異常中止序列化并且不存儲(chǔ)該對(duì)象。

此方法僅在第一次遇到每個(gè)對(duì)象時(shí)調(diào)用一次。對(duì)該對(duì)象的所有后續(xù)引用都將重定向到新對(duì)象。

參數(shù):

參數(shù)名稱參數(shù)描述
obj被替換的對(duì)象

返回:

被替換的對(duì)象

Throws:

Throw名稱Throw描述
IOException任何常見的輸入/輸出異常。

enableResolveObject

protected boolean enableResolveObject(boolean enable) throws SecurityException

啟用流以允許替換從流中讀取的對(duì)象。 啟用后,將為每個(gè)要反序列化的對(duì)象調(diào)用 resolveObject 方法。

如果 enable 為 true,并且安裝了安全管理器,則此方法首先調(diào)用安全管理器的 checkPermission 方法,并具有 SerializablePermission("enableSubstitution") 權(quán)限,以確保可以啟用流以允許替換從流中讀取的對(duì)象。

參數(shù):

參數(shù)名稱參數(shù)描述
enabletrue 為每個(gè)被反序列化的對(duì)象啟用 resolveObject

返回:

調(diào)用此方法之前的先前設(shè)置

Throws:

Throw名稱Throw描述
SecurityException如果安全管理器存在并且其 checkPermission 方法拒絕啟用流以允許從流中讀取的對(duì)象被替換。

readStreamHeader

protected void readStreamHeader() throws IOException, StreamCorruptedException

提供 readStreamHeader 方法是為了允許子類讀取和驗(yàn)證它們自己的流標(biāo)頭。 它讀取并驗(yàn)證幻數(shù)和版本號(hào)。

Throws:

Throw名稱Throw描述
IOException如果從底層 InputStream 讀取時(shí)出現(xiàn) I/O 錯(cuò)誤
StreamCorruptedException如果流中的控制信息不一致

readClassDescriptor

protected ObjectStreamClass readClassDescriptor() throws ClassNotFoundException, IOException

從序列化流中讀取類描述符。 當(dāng) ObjectInputStream 期望類描述符作為序列化流中的下一項(xiàng)時(shí),將調(diào)用此方法。 ObjectInputStream 的子類可以覆蓋此方法以讀取以非標(biāo)準(zhǔn)格式編寫的類描述符(通過覆蓋 writeClassDescriptor 方法的 ObjectOutputStream 的子類)。 默認(rèn)情況下,此方法根據(jù)對(duì)象序列化規(guī)范中定義的格式讀取類描述符。

返回:

類描述符讀取

Throws:

Throw名稱Throw描述
IOException如果發(fā)生 I/O 錯(cuò)誤。
ClassNotFoundException如果找不到類描述符表示中使用的序列化對(duì)象的 Class

Since:

1.3

read

public int read() throws IOException

讀取一個(gè)字節(jié)的數(shù)據(jù)。 如果沒有可用的輸入,此方法將阻塞。

指定者:

讀入接口 ObjectInput

指定者:

讀入類 InputStream

返回:

讀取的字節(jié),如果到達(dá)流的末尾,則為 -1。

Throws:

Throw名稱Throw描述
IOException如果發(fā)生 I/O 錯(cuò)誤。

read

public int read(byte[] buf, int off, int len) throws IOException

讀入一個(gè)字節(jié)數(shù)組。 此方法將阻塞,直到某些輸入可用。 考慮使用 java.io.DataInputStream.readFully 準(zhǔn)確讀取“長度”字節(jié)。

指定者:

讀入接口 ObjectInput

覆蓋:

讀入類 InputStream

參數(shù):

參數(shù)名稱參數(shù)描述
buf讀取數(shù)據(jù)的緩沖區(qū)
off數(shù)據(jù)的起始偏移量
len讀取的最大字節(jié)數(shù)

返回:

實(shí)際讀取的字節(jié)數(shù),到達(dá)流末尾時(shí)返回-1。

Throws:

Throw名稱Throw描述
IOException如果發(fā)生 I/O 錯(cuò)誤。

available

public int available() throws IOException

返回可以在不阻塞的情況下讀取的字節(jié)數(shù)。

指定者:

在接口 ObjectInput 中可用

覆蓋:

在類 InputStream 中可用

返回:

可用字節(jié)數(shù)。

Throws:

Throw名稱Throw描述
IOException如果從底層 InputStream 讀取時(shí)出現(xiàn) I/O 錯(cuò)誤

close

public void close() throws IOException

關(guān)閉輸入流。 必須調(diào)用以釋放與流關(guān)聯(lián)的任何資源。

指定者:

在接口 AutoCloseable 中關(guān)閉

指定者:

在接口Closeable中關(guān)閉

指定者:

在接口 ObjectInput 中關(guān)閉

覆蓋:

在類 InputStream 中關(guān)閉

Throws:

Throw名稱Throw描述
IOException如果發(fā)生 I/O 錯(cuò)誤。

readBoolean

public boolean readBoolean() throws IOException

以布爾值讀取。

指定者:

接口 DataInput 中的 readBoolean

返回:

布爾讀取。

Throws:

Throw名稱Throw描述
EOFException如果到達(dá)文件末尾。
IOException如果發(fā)生其他 I/O 錯(cuò)誤。

readByte

public byte readByte() throws IOException

讀取一個(gè) 8 位字節(jié)。

指定者:

接口 DataInput 中的 readByte

返回:

8位字節(jié)讀取。

Throws:

Throw名稱Throw描述
EOFException如果到達(dá)文件末尾。
IOException如果發(fā)生其他 I/O 錯(cuò)誤。

readUnsignedByte

public int readUnsignedByte() throws IOException

讀取一個(gè)無符號(hào)的 8 位字節(jié)。

指定者:

接口 DataInput 中的 readUnsignedByte

返回:

8位字節(jié)讀取。

Throws:

Throw名稱Throw描述
EOFException如果到達(dá)文件末尾。
IOException如果發(fā)生其他 I/O 錯(cuò)誤。

readChar

public char readChar() throws IOException

讀取 16 位字符。

指定者:

接口 DataInput 中的 readChar

返回:

讀取 16 位字符。

Throws:

Throw名稱Throw描述
EOFException如果到達(dá)文件末尾。
IOException如果發(fā)生其他 I/O 錯(cuò)誤。

readShort

public short readShort() throws IOException

讀取 16 位短。

指定者:

接口 DataInput 中的 readShort

返回:

16位短讀。

Throws:

Throw名稱Throw描述
EOFException如果到達(dá)文件末尾。
IOException如果發(fā)生其他 I/O 錯(cuò)誤。

readUnsignedShort

public int readUnsignedShort() throws IOException

讀取無符號(hào) 16 位短。

指定者:

接口 DataInput 中的 readUnsignedShort

返回:

16位短讀。

Throws:

Throw名稱Throw描述
EOFException如果到達(dá)文件末尾。
IOException如果發(fā)生其他 I/O 錯(cuò)誤。

readInt

public int readInt() throws IOException

讀取 32 位整數(shù)。

指定者:

接口 DataInput 中的 readInt

返回:

讀取的 32 位整數(shù)。

Throws:

Throw名稱Throw描述
EOFException如果到達(dá)文件末尾。
IOException如果發(fā)生其他 I/O 錯(cuò)誤。

readLong

public long readLong() throws IOException

讀取 64 位長。

指定者:

接口 DataInput 中的 readLong

返回:

讀取 64 位長。

Throws:

Throw名稱Throw描述
EOFException如果到達(dá)文件末尾。
IOException如果發(fā)生其他 I/O 錯(cuò)誤。

readFloat

public float readFloat() throws IOException

讀取 32 位浮點(diǎn)數(shù)。

指定者:

接口 DataInput 中的 readFloat

返回:

32 位浮點(diǎn)數(shù)讀取。

Throws:

Throw名稱Throw描述
EOFException如果到達(dá)文件末尾。
IOException如果發(fā)生其他 I/O 錯(cuò)誤。

readDouble

public double readDouble() throws IOException

讀取 64 位雙精度。

指定者:

接口 DataInput 中的 readDouble

返回:

64位雙讀。

Throws:

Throw名稱Throw描述
EOFException如果到達(dá)文件末尾。
IOException如果發(fā)生其他 I/O 錯(cuò)誤。

readFully

public void readFully(byte[] buf) throws IOException

讀取字節(jié),阻塞直到讀取所有字節(jié)。

指定者:

接口 DataInput 中的 readFully

參數(shù):

參數(shù)名稱參數(shù)描述
buf讀取數(shù)據(jù)的緩沖區(qū)

Throws:

Throw名稱Throw描述
EOFException如果到達(dá)文件末尾。
IOException如果發(fā)生其他 I/O 錯(cuò)誤。

readFully

public void readFully(byte[] buf, int off, int len) throws IOException

讀取字節(jié),阻塞直到讀取所有字節(jié)。

指定者:

接口 DataInput 中的 readFully

參數(shù):

參數(shù)名稱參數(shù)描述
buf讀取數(shù)據(jù)的緩沖區(qū)
off數(shù)據(jù)的起始偏移量
len要讀取的最大字節(jié)數(shù)

Throws:

Throw名稱Throw描述
EOFException如果到達(dá)文件末尾。
IOException如果發(fā)生其他 I/O 錯(cuò)誤。

skipBytes

public int skipBytes(int len) throws IOException

跳過字節(jié)。

指定者:

接口 DataInput 中的 skipBytes

參數(shù):

參數(shù)名稱參數(shù)描述
len要跳過的字節(jié)數(shù)

返回:

跳過的實(shí)際字節(jié)數(shù)。

Throws:

Throw名稱Throw描述
IOException如果發(fā)生 I/O 錯(cuò)誤。

readLine

@Deprecated public String readLine() throws IOException

已棄用。 此方法不能正確地將字節(jié)轉(zhuǎn)換為字符。 有關(guān)詳細(xì)信息和替代方案,請(qǐng)參閱 DataInputStream。

讀取已被 \n、\r、\r\n 或 EOF 終止的行。

指定者:

接口 DataInput 中的 readLine

返回:

該行的字符串副本。

Throws:

Throw名稱Throw描述
IOException如果從底層 InputStream 讀取時(shí)出現(xiàn) I/O 錯(cuò)誤

readUTF

public String readUTF() throws IOException

以修改后的 UTF-8 格式讀取字符串。

指定者:

接口 DataInput 中的 readUTF

返回:

字符串。

Throws:

Throw名稱Throw描述
IOException如果從底層 InputStream 讀取時(shí)出現(xiàn) I/O 錯(cuò)誤
UTFDataFormatException如果讀取的字節(jié)不代表字符串的有效修改 UTF-8 編碼

標(biāo)題名稱:創(chuàng)新互聯(lián)鴻蒙OS教程:鴻蒙OS ObjectInputStream
網(wǎng)站網(wǎng)址:http://www.5511xx.com/article/copihoe.html