W3Cschool
恭喜您成為首批注冊(cè)用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
java.lang.Object
|---java.io.OutputStream
|---|---java.io.ObjectOutputStream
public class ObjectOutputStream
extends OutputStream
implements ObjectOutput, ObjectStreamConstants
ObjectOutputStream 將 Java 對(duì)象的原始數(shù)據(jù)類型和圖形寫(xiě)入 OutputStream。 可以使用 ObjectInputStream 讀取(重構(gòu))對(duì)象。 對(duì)象的持久存儲(chǔ)可以通過(guò)使用流的文件來(lái)實(shí)現(xiàn)。 如果流是網(wǎng)絡(luò)套接字流,則可以在另一個(gè)主機(jī)或另一個(gè)進(jìn)程中重構(gòu)對(duì)象。
只有支持 java.io.Serializable 接口的對(duì)象才能寫(xiě)入流。 每個(gè)可序列化對(duì)象的類都經(jīng)過(guò)編碼,包括類的類名和簽名、對(duì)象的字段和數(shù)組的值,以及從初始對(duì)象引用的任何其他對(duì)象的閉包。
writeObject 方法用于將對(duì)象寫(xiě)入流。任何對(duì)象,包括字符串和數(shù)組,都是用 writeObject 編寫(xiě)的??梢詫⒍鄠€(gè)對(duì)象或原語(yǔ)寫(xiě)入流。對(duì)象必須從相應(yīng)的 ObjectInputstream 以與寫(xiě)入時(shí)相同的類型和相同的順序讀回。
原始數(shù)據(jù)類型也可以使用 DataOutput 中的適當(dāng)方法寫(xiě)入流。也可以使用 writeUTF 方法寫(xiě)入字符串。
對(duì)象的默認(rèn)序列化機(jī)制寫(xiě)入對(duì)象的類、類簽名以及所有非瞬態(tài)和非靜態(tài)字段的值。對(duì)其他對(duì)象的引用(瞬態(tài)或靜態(tài)字段除外)也會(huì)導(dǎo)致這些對(duì)象被寫(xiě)入。使用引用共享機(jī)制對(duì)單個(gè)對(duì)象的多個(gè)引用進(jìn)行編碼,以便對(duì)象的圖形可以恢復(fù)到與原始對(duì)象寫(xiě)入時(shí)相同的形狀。
比如寫(xiě)一個(gè)ObjectInputStream中的例子可以讀取的對(duì)象:
FileOutputStream fos = new FileOutputStream("t.tmp");
ObjectOutputStream oos = new ObjectOutputStream(fos);
oos.writeInt(12345);
oos.writeObject("Today");
oos.writeObject(new Date());
oos.close();
在序列化和反序列化過(guò)程中需要特殊處理的類必須實(shí)現(xiàn)具有這些確切簽名的特殊方法:
private void readObject(java.io.ObjectInputStream stream)
throws IOException, ClassNotFoundException;
private void writeObject(java.io.ObjectOutputStream stream)
throws IOException
private void readObjectNoData()
throws ObjectStreamException;
writeObject 方法負(fù)責(zé)為其特定類寫(xiě)入對(duì)象的狀態(tài),以便相應(yīng)的 readObject 方法可以恢復(fù)它。該方法不需要關(guān)注屬于對(duì)象的超類或子類的狀態(tài)。通過(guò)使用 writeObject 方法或使用 DataOutput 支持的原始數(shù)據(jù)類型的方法將各個(gè)字段寫(xiě)入 ObjectOutputStream 來(lái)保存狀態(tài)。
序列化不會(huì)寫(xiě)出任何未實(shí)現(xiàn) java.io.Serializable 接口的對(duì)象的字段。不可序列化的對(duì)象的子類可以是可序列化的。在這種情況下,不可序列化的類必須有一個(gè)無(wú)參數(shù)的構(gòu)造函數(shù)來(lái)允許其字段被初始化。在這種情況下,子類負(fù)責(zé)保存和恢復(fù)不可序列化類的狀態(tài)。通常情況下,該類的字段是可訪問(wèn)的(公共的、包的或受保護(hù)的),或者存在可用于恢復(fù)狀態(tài)的 get 和 set 方法。
可以通過(guò)實(shí)現(xiàn)拋出 NotSerializableException 的 writeObject 和 readObject 方法來(lái)防止對(duì)象的序列化。異常將被 ObjectOutputStream 捕獲并中止序列化過(guò)程。
實(shí)現(xiàn) Externalizable 接口允許對(duì)象完全控制對(duì)象序列化形式的內(nèi)容和格式。調(diào)用 Externalizable 接口的方法 writeExternal 和 readExternal 來(lái)保存和恢復(fù)對(duì)象狀態(tài)。當(dāng)由一個(gè)類實(shí)現(xiàn)時(shí),它們可以使用 ObjectOutput 和 ObjectInput 的所有方法寫(xiě)入和讀取自己的狀態(tài)。對(duì)象負(fù)責(zé)處理發(fā)生的任何版本控制。
枚舉常量的序列化方式與普通的可序列化或可外部化對(duì)象不同。枚舉常量的序列化形式僅由其名稱組成;不傳輸常量的字段值。為了序列化枚舉常量,ObjectOutputStream 寫(xiě)入常量的 name 方法返回的字符串。與其他可序列化或可外部化的對(duì)象一樣,枚舉常量可以充當(dāng)隨后出現(xiàn)在序列化流中的反向引用的目標(biāo)。無(wú)法自定義枚舉常量序列化的過(guò)程;在序列化過(guò)程中,枚舉類型定義的任何類特定的 writeObject 和 writeReplace 方法都會(huì)被忽略。同樣,任何 serialPersistentFields 或 serialVersionUID 字段聲明也將被忽略——所有枚舉類型都有一個(gè)固定的 serialVersionUID 為 0L。
原始數(shù)據(jù)(不包括可序列化字段和可外部化數(shù)據(jù))以塊數(shù)據(jù)記錄的形式寫(xiě)入 ObjectOutputStream。塊數(shù)據(jù)記錄由標(biāo)題和數(shù)據(jù)組成。塊數(shù)據(jù)頭由一個(gè)標(biāo)記和跟隨頭的字節(jié)數(shù)組成。連續(xù)的原始數(shù)據(jù)寫(xiě)入合并到一個(gè)塊數(shù)據(jù)記錄中。用于塊數(shù)據(jù)記錄的阻塞因子為 1024 字節(jié)。每個(gè)塊數(shù)據(jù)記錄將被填充到 1024 字節(jié),或者在塊數(shù)據(jù)模式終止時(shí)寫(xiě)入。對(duì) ObjectOutputStream 方法 writeObject、defaultWriteObject 和 writeFields 的調(diào)用最初會(huì)終止任何現(xiàn)有的塊數(shù)據(jù)記錄。
Since:
JDK1.1
修飾符和類型 | 類 | 描述 |
---|---|---|
static class | ObjectOutputStream.PutField | 提供對(duì)要寫(xiě)入 ObjectOutput 的持久字段的編程訪問(wèn)。 |
從接口 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ù) | 描述 |
---|---|---|
protected | ObjectOutputStream() | 為完全重新實(shí)現(xiàn) ObjectOutputStream 的子類提供一種方法,使其不必分配剛剛由 ObjectOutputStream 的實(shí)現(xiàn)使用的私有數(shù)據(jù)。 |
ObjectOutputStream(OutputStream out) | 創(chuàng)建一個(gè)寫(xiě)入指定 OutputStream 的 ObjectOutputStream。 |
修飾符和類型 | 方法 | 描述 |
---|---|---|
protected void | annotateClass(Class<?> cl) | 子類可以實(shí)現(xiàn)此方法以允許將類數(shù)據(jù)存儲(chǔ)在流中。 |
protected void | annotateProxyClass(Class<?> cl) | 子類可以實(shí)現(xiàn)此方法以將自定義數(shù)據(jù)與動(dòng)態(tài)代理類的描述符一起存儲(chǔ)在流中。 |
void | close() | 關(guān)閉流。 |
void | defaultWriteObject() | 將當(dāng)前類的非靜態(tài)和非瞬態(tài)字段寫(xiě)入此流。 |
protected void | drain() | 排出 ObjectOutputStream 中的所有緩沖數(shù)據(jù)。 |
protected boolean | enableReplaceObject(boolean enable) | 使流能夠替換流中的對(duì)象。 |
void | flush() | 沖洗流。 |
ObjectOutputStream.PutField | putFields() | 檢索用于緩沖要寫(xiě)入流的持久字段的對(duì)象。 |
protected Object | replaceObject(Object obj) | 此方法將允許 ObjectOutputStream 的受信任子類在序列化期間用一個(gè)對(duì)象替換另一個(gè)對(duì)象。 |
void | reset() | 重置將忽略已寫(xiě)入流的任何對(duì)象的狀態(tài)。 |
void | useProtocolVersion(int version) | 指定寫(xiě)入流時(shí)要使用的流協(xié)議版本。 |
void | write(byte[] buf) | 寫(xiě)入一個(gè)字節(jié)數(shù)組。 |
void | write(byte[] buf, int off, int len) | 寫(xiě)入一個(gè)子字節(jié)數(shù)組。 |
void | write(int val) | 寫(xiě)入一個(gè)字節(jié)。 |
void | writeBoolean(boolean val) | 寫(xiě)入一個(gè)布爾值。 |
void | writeByte(int val) | 寫(xiě)入一個(gè) 8 位字節(jié)。 |
void | writeBytes(String str) | 將 String 作為字節(jié)序列寫(xiě)入。 |
void | writeChar(int val) | 寫(xiě)入一個(gè) 16 位字符。 |
void | writeChars(String str) | 將字符串寫(xiě)入字符序列。 |
protected void | writeClassDescriptor(ObjectStreamClass desc) | 將指定的類描述符寫(xiě)入 ObjectOutputStream。 |
void | writeDouble(double val) | 寫(xiě)入 64 位雙精度。 |
void | writeFields() | 將緩沖字段寫(xiě)入流。 |
void | writeFloat(float val) | 寫(xiě)入一個(gè) 32 位浮點(diǎn)數(shù)。 |
void | writeInt(int val) | 寫(xiě)入一個(gè) 32 位整數(shù)。 |
void | writeLong(long val) | 寫(xiě)入 64 位長(zhǎng)。 |
void | writeObject(Object obj) | 將指定對(duì)象寫(xiě)入 ObjectOutputStream。 |
protected void | writeObjectOverride(Object obj) | 子類用來(lái)覆蓋默認(rèn) writeObject 方法的方法。 |
void | writeShort(int val) | 寫(xiě)入 16 位短。 |
protected void | writeStreamHeader() | 提供了 writeStreamHeader 方法,因此子類可以將自己的標(biāo)頭附加或前置到流中。 |
void | writeUnshared(Object obj) | 將“非共享”對(duì)象寫(xiě)入 ObjectOutputStream。 |
void | writeUTF(String str) | 以修改后的 UTF-8 格式寫(xiě)入此字符串的原始數(shù)據(jù)。 |
從類 java.lang.Object 繼承的方法 |
---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
public ObjectOutputStream(OutputStream out) throws IOException
創(chuàng)建一個(gè)寫(xiě)入指定 OutputStream 的 ObjectOutputStream。 此構(gòu)造函數(shù)將序列化流標(biāo)頭寫(xiě)入底層流; 調(diào)用者可能希望立即刷新流,以確保接收 ObjectInputStreams 的構(gòu)造函數(shù)在讀取標(biāo)頭時(shí)不會(huì)阻塞。
如果安裝了安全管理器,則此構(gòu)造函數(shù)將在由覆蓋 ObjectOutputStream.putFields 或 ObjectOutputStream.writeUnshared 方法的子類的構(gòu)造函數(shù)直接或間接調(diào)用時(shí)檢查“enableSubclassImplementation”SerializablePermission。
參數(shù):
參數(shù)名稱 | 參數(shù)描述 |
---|---|
out | 要寫(xiě)入的輸出流 |
Throws:
Throw名稱 | Throw描述 |
---|---|
IOException | 如果在寫(xiě)入流標(biāo)頭時(shí)發(fā)生 I/O 錯(cuò)誤 |
SecurityException | 如果不受信任的子類非法覆蓋安全敏感方法 |
NullPointerException | 如果 out 為空 |
Since:
1.4
protected ObjectOutputStream() throws IOException, SecurityException
為完全重新實(shí)現(xiàn) ObjectOutputStream 的子類提供一種方法,使其不必分配剛剛由 ObjectOutputStream 的實(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ò)誤 |
public void useProtocolVersion(int version) throws IOException
指定寫(xiě)入流時(shí)要使用的流協(xié)議版本。
此例程提供了一個(gè)掛鉤,使當(dāng)前版本的序列化能夠以向后兼容的流格式的先前版本的格式寫(xiě)入。
將盡一切努力避免引入額外的向后不兼容; 但是,有時(shí)沒(méi)有其他選擇。
參數(shù):
參數(shù)名稱 | 參數(shù)描述 |
---|---|
version | 使用來(lái)自 java.io.ObjectStreamConstants 的 ProtocolVersion。 |
Throws:
Throw名稱 | Throw描述 |
---|---|
IllegalStateException | 如果在任何對(duì)象被序列化后調(diào)用。 |
IllegalArgumentException | 如果傳入無(wú)效版本。 |
IOException | 如果發(fā)生 I/O 錯(cuò)誤 |
Since:
1.2
public final void writeObject(Object obj) throws IOException
將指定對(duì)象寫(xiě)入 ObjectOutputStream。 寫(xiě)入對(duì)象的類、類的簽名、類的非瞬態(tài)和非靜態(tài)字段的值及其所有超類型。 可以使用 writeObject 和 readObject 方法覆蓋類的默認(rèn)序列化。 此對(duì)象引用的對(duì)象是可傳遞寫(xiě)入的,因此可以通過(guò) ObjectInputStream 重建對(duì)象的完整等效圖。
對(duì)于 OutputStream 的問(wèn)題和不應(yīng)序列化的類,將引發(fā)異常。 所有異常對(duì)于 OutputStream 來(lái)說(shuō)都是致命的,它處于不確定狀態(tài),由調(diào)用者來(lái)忽略或恢復(fù)流狀態(tài)。
指定者:
接口 ObjectOutput 中的 writeObject
參數(shù):
參數(shù)名稱 | 參數(shù)描述 |
---|---|
obj | 要寫(xiě)入的對(duì)象 |
Throws:
Throw名稱 | Throw描述 |
---|---|
InvalidClassException | 序列化使用的類有問(wèn)題。 |
NotSerializableException | 某些要序列化的對(duì)象沒(méi)有實(shí)現(xiàn) java.io.Serializable 接口。 |
IOException | 底層 OutputStream 引發(fā)的任何異常。 |
protected void writeObjectOverride(Object obj) throws IOException
子類用來(lái)覆蓋默認(rèn) writeObject 方法的方法。 此方法由使用受保護(hù)的無(wú)參數(shù)構(gòu)造函數(shù)構(gòu)造 ObjectInputStream 的 ObjectInputStream 的受信任子類調(diào)用。 子類應(yīng)提供帶有修飾符“final”的覆蓋方法。
參數(shù):
參數(shù)名稱 | 參數(shù)描述 |
---|---|
obj | 要寫(xiě)入底層流的對(duì)象 |
Throws:
Throw名稱 | Throw描述 |
---|---|
IOException | 如果在寫(xiě)入底層流時(shí)出現(xiàn) I/O 錯(cuò)誤 |
Since:
1.2
public void writeUnshared(Object obj) throws IOException
將“非共享”對(duì)象寫(xiě)入 ObjectOutputStream。 此方法與 writeObject 相同,不同之處在于它始終將給定對(duì)象作為流中新的唯一對(duì)象寫(xiě)入(與指向先前序列化實(shí)例的反向引用相反)。 具體來(lái)說(shuō):
雖然通過(guò) writeUnshared 寫(xiě)入對(duì)象本身并不能保證在反序列化時(shí)對(duì)該對(duì)象的唯一引用,但它允許在流中多次定義單個(gè)對(duì)象,因此接收方對(duì) readUnshared 的多次調(diào)用不會(huì)發(fā)生沖突。 請(qǐng)注意,上述規(guī)則僅適用于使用 writeUnshared 編寫(xiě)的基礎(chǔ)級(jí)對(duì)象,不適用于要序列化的對(duì)象圖中的任何可傳遞引用的子對(duì)象。
覆蓋此方法的 ObjectOutputStream 子類只能在擁有“enableSubclassImplementation”SerializablePermission 的安全上下文中構(gòu)造; 任何嘗試在沒(méi)有此權(quán)限的情況下實(shí)例化此類子類都將導(dǎo)致拋出 SecurityException。
參數(shù):
參數(shù)名稱 | 參數(shù)描述 |
---|---|
obj | 要寫(xiě)入流的對(duì)象 |
Throws:
Throw名稱 | Throw沒(méi)事 |
---|---|
NotSerializableException | 如果圖中要序列化的對(duì)象沒(méi)有實(shí)現(xiàn) Serializable 接口 |
InvalidClassException | 如果要序列化的對(duì)象的類存在問(wèn)題 |
IOException | 如果在序列化過(guò)程中發(fā)生 I/O 錯(cuò)誤 |
Since:
1.4
public void defaultWriteObject() throws IOException
將當(dāng)前類的非靜態(tài)和非瞬態(tài)字段寫(xiě)入此流。 這只能從被序列化的類的 writeObject 方法中調(diào)用。 如果以其他方式調(diào)用它將拋出 NotActiveException。
Throws:
Throw名稱 | Throw描述 |
---|---|
IOException | 如果在寫(xiě)入底層 OutputStream 時(shí)發(fā)生 I/O 錯(cuò)誤 |
public ObjectOutputStream.PutField putFields() throws IOException
檢索用于緩沖要寫(xiě)入流的持久字段的對(duì)象。 當(dāng)調(diào)用 writeFields 方法時(shí),字段將被寫(xiě)入流。
返回:
包含可序列化字段的 Putfield 類的實(shí)例
Throws:
Throw名稱 | Throw描述 |
---|---|
IOException | 如果發(fā)生 I/O 錯(cuò)誤 |
Since:
1.2
public void writeFields() throws IOException
將緩沖字段寫(xiě)入流。
Throws:
Throw名稱 | Throw描述 |
---|---|
IOException | 如果在寫(xiě)入底層流時(shí)發(fā)生 I/O 錯(cuò)誤 |
NotActiveException | 當(dāng)未調(diào)用類 writeObject 方法來(lái)寫(xiě)入對(duì)象的狀態(tài)時(shí)調(diào)用。 |
Since:
1.2
public void reset() throws IOException
重置將忽略已寫(xiě)入流的任何對(duì)象的狀態(tài)。 狀態(tài)被重置為與新的 ObjectOutputStream 相同。 流中的當(dāng)前點(diǎn)被標(biāo)記為重置,因此相應(yīng)的 ObjectInputStream 將在同一點(diǎn)重置。 之前寫(xiě)入流的對(duì)象不會(huì)被稱為已經(jīng)在流中。 它們將再次寫(xiě)入流。
Throws:
Throw名稱 | Throw描述 |
---|---|
IOException | 如果在序列化對(duì)象時(shí)調(diào)用了 reset()。 |
protected void annotateClass(Class<?> cl) throws IOException
子類可以實(shí)現(xiàn)此方法以允許將類數(shù)據(jù)存儲(chǔ)在流中。 默認(rèn)情況下,此方法不執(zhí)行任何操作。 ObjectInputStream 中對(duì)應(yīng)的方法是resolveClass。 對(duì)于流中的每個(gè)唯一類,該方法只調(diào)用一次。 類名和簽名將已寫(xiě)入流。 此方法可以免費(fèi)使用 ObjectOutputStream 來(lái)保存它認(rèn)為合適的類的任何表示(例如,類文件的字節(jié))。 ObjectInputStream 對(duì)應(yīng)子類中的resolveClass 方法必須讀取和使用annotateClass 寫(xiě)入的任何數(shù)據(jù)或?qū)ο蟆?/p>
參數(shù):
參數(shù)名稱 | 參數(shù)描述 |
---|---|
cl | 注釋自定義數(shù)據(jù)的類 |
Throws:
Throw名稱 | Throw描述 |
---|---|
IOException | 底層 OutputStream 引發(fā)的任何異常。 |
protected void annotateProxyClass(Class<?> cl) throws IOException
子類可以實(shí)現(xiàn)此方法以將自定義數(shù)據(jù)與動(dòng)態(tài)代理類的描述符一起存儲(chǔ)在流中。
對(duì)于流中的每個(gè)唯一代理類描述符,該方法只調(diào)用一次。 ObjectOutputStream 中此方法的默認(rèn)實(shí)現(xiàn)不執(zhí)行任何操作。
ObjectInputStream 中對(duì)應(yīng)的方法是resolveProxyClass。 對(duì)于覆蓋此方法的給定 ObjectOutputStream 子類,ObjectInputStream 對(duì)應(yīng)子類中的 resolveProxyClass 方法必須讀取 annotateProxyClass 寫(xiě)入的任何數(shù)據(jù)或?qū)ο蟆?/p>
參數(shù):
參數(shù)名稱 | 參數(shù)描述 |
---|---|
cl | 用于注釋自定義數(shù)據(jù)的代理類 |
Throws:
Throw名稱 | Throw描述 |
---|---|
IOException | 底層 OutputStream 拋出的任何異常 |
Since:
1.3
protected Object replaceObject(Object obj) throws IOException
此方法將允許 ObjectOutputStream 的受信任子類在序列化期間用一個(gè)對(duì)象替換另一個(gè)對(duì)象。在調(diào)用 enableReplaceObject 之前,禁用替換對(duì)象。 enableReplaceObject 方法檢查請(qǐng)求進(jìn)行替換的流是否可信。寫(xiě)入序列化流的每個(gè)對(duì)象的第一次出現(xiàn)被傳遞給replaceObject。對(duì)該對(duì)象的后續(xù)引用被替換為原始調(diào)用replaceObject 返回的對(duì)象。為了確保對(duì)象的私有狀態(tài)不會(huì)被無(wú)意暴露,只有受信任的流可以使用 replaceObject。
ObjectOutputStream.writeObject 方法采用 Object 類型(與 Serializable 類型相反)的參數(shù),以允許將不可序列化對(duì)象替換為可序列化對(duì)象的情況。
當(dāng)子類替換對(duì)象時(shí),它必須確保在反序列化期間必須進(jìn)行補(bǔ)充替換,或者確保替換的對(duì)象與將存儲(chǔ)引用的每個(gè)字段兼容。類型不是字段或數(shù)組元素類型的子類的對(duì)象通過(guò)引發(fā)異常中止序列化并且不存儲(chǔ)該對(duì)象。
此方法僅在第一次遇到每個(gè)對(duì)象時(shí)調(diào)用一次。對(duì)該對(duì)象的所有后續(xù)引用都將重定向到新對(duì)象。此方法應(yīng)返回要替換的對(duì)象或原始對(duì)象。
Null 可以作為要替換的對(duì)象返回,但可能會(huì)在包含對(duì)原始對(duì)象的引用的類中導(dǎo)致 NullReferenceException,因?yàn)樗鼈兛赡芷谕粋€(gè)對(duì)象而不是 null。
參數(shù):
參數(shù)名稱 | 參數(shù)描述 |
---|---|
obj | 被替換的對(duì)象 |
返回:
替換指定對(duì)象的替代對(duì)象
Throws:
Throw名稱 | Throw描述 |
---|---|
IOException | 底層 OutputStream 引發(fā)的任何異常。 |
protected boolean enableReplaceObject(boolean enable) throws SecurityException
使流能夠替換流中的對(duì)象。 啟用后,將為每個(gè)正在序列化的對(duì)象調(diào)用 replaceObject 方法。
如果 enable 為 true,并且安裝了安全管理器,此方法首先調(diào)用安全管理器的 checkPermission 方法,并具有 SerializablePermission("enableSubstitution") 權(quán)限,以確??梢詥⒂昧鱽?lái)替換流中的對(duì)象。
參數(shù):
參數(shù)名稱 | 參數(shù)描述 |
---|---|
enable | 用于啟用對(duì)象替換的布爾參數(shù) |
返回:
調(diào)用此方法之前的先前設(shè)置
Throws:
Throw名稱 | Throw描述 |
---|---|
SecurityException | 如果存在安全管理器并且其 checkPermission 方法拒絕啟用流來(lái)替換流中的對(duì)象。 |
protected void writeStreamHeader() throws IOException
提供了 writeStreamHeader 方法,因此子類可以將自己的標(biāo)頭附加或前置到流中。 它將幻數(shù)和版本寫(xiě)入流。
Throws:
Throw名稱 | Throw描述 |
---|---|
IOException | 如果在寫(xiě)入底層流時(shí)發(fā)生 I/O 錯(cuò)誤 |
protected void writeClassDescriptor(ObjectStreamClass desc) throws IOException
將指定的類描述符寫(xiě)入 ObjectOutputStream。 類描述符用于標(biāo)識(shí)寫(xiě)入流的對(duì)象的類。 ObjectOutputStream 的子類可以重寫(xiě)此方法以自定義將類描述符寫(xiě)入序列化流的方式。 然后應(yīng)該重寫(xiě) ObjectInputStream 中的相應(yīng)方法 readClassDescriptor 以從其自定義流表示中重構(gòu)類描述符。 默認(rèn)情況下,此方法根據(jù)對(duì)象序列化規(guī)范中定義的格式寫(xiě)入類描述符。
請(qǐng)注意,僅當(dāng) ObjectOutputStream 未使用舊的序列化流格式(通過(guò)調(diào)用 ObjectOutputStream 的 useProtocolVersion 方法設(shè)置)時(shí)才會(huì)調(diào)用此方法。 如果此序列化流使用舊格式 (PROTOCOL_VERSION_1),則類描述符將以無(wú)法覆蓋或自定義的方式在內(nèi)部寫(xiě)入。
參數(shù):
參數(shù)名稱 | 參數(shù)描述 |
---|---|
desc | 寫(xiě)入流的類描述符 |
Throws:
Throw名稱 | Throw描述 |
---|---|
IOException | 如果發(fā)生 I/O 錯(cuò)誤。 |
Since:
1.3
public void write(int val) throws IOException
寫(xiě)入一個(gè)字節(jié)。 此方法將阻塞,直到實(shí)際寫(xiě)入字節(jié)。
指定者:
寫(xiě)入接口DataOutput
指定者:
寫(xiě)入接口ObjectOutput
指定者:
寫(xiě)在類 OutputStream
參數(shù):
參數(shù)名稱 | 參數(shù)描述 |
---|---|
val | 要寫(xiě)入流的字節(jié) |
Throws:
Throw名稱 | Throw描述 |
---|---|
IOException | 如果發(fā)生 I/O 錯(cuò)誤。 |
public void write(byte[] buf) throws IOException
寫(xiě)入一個(gè)字節(jié)數(shù)組。 此方法將阻塞,直到實(shí)際寫(xiě)入字節(jié)。
指定者:
寫(xiě)入接口DataOutput
指定者:
寫(xiě)入接口ObjectOutput
覆蓋:
寫(xiě)在類 OutputStream
參數(shù):
參數(shù)名稱 | 參數(shù)描述 |
---|---|
buf | 要寫(xiě)入的數(shù)據(jù) |
Throws:
Throw名稱 | Throw描述 |
---|---|
IOException | 如果發(fā)生 I/O 錯(cuò)誤。 |
public void write(byte[] buf, int off, int len) throws IOException
寫(xiě)入一個(gè)子字節(jié)數(shù)組。
指定者:
寫(xiě)入接口DataOutput
指定者:
寫(xiě)入接口ObjectOutput
覆蓋:
寫(xiě)在類 OutputStream
參數(shù):
參數(shù)名稱 | 參數(shù)描述 |
---|---|
buf | 要寫(xiě)入的數(shù)據(jù) |
off | 數(shù)據(jù)中的起始偏移量 |
len | 寫(xiě)入的字節(jié)數(shù) |
Throws:
Throw名稱 | Throw描述 |
---|---|
IOException | 如果發(fā)生 I/O 錯(cuò)誤。 |
public void flush() throws IOException
沖洗流。 這將寫(xiě)入任何緩沖的輸出字節(jié)并刷新到底層流。
指定者:
在接口 Flushable 中刷新
指定者:
在接口 ObjectOutput 中刷新
覆蓋:
類 OutputStream 中的刷新
Throws:
Throw名稱 | Throw描述 |
---|---|
IOException | 如果發(fā)生 I/O 錯(cuò)誤。 |
protected void drain() throws IOException
排出 ObjectOutputStream 中的所有緩沖數(shù)據(jù)。 與刷新類似,但不會(huì)將刷新傳播到底層流。
Throws:
Throw名稱 | Throw描述 |
---|---|
IOException | 如果在寫(xiě)入底層流時(shí)發(fā)生 I/O 錯(cuò)誤 |
public void close() throws IOException
關(guān)閉流。 必須調(diào)用此方法來(lái)釋放與流關(guān)聯(lián)的任何資源。
指定者:
在接口 AutoCloseable 中關(guān)閉
指定者:
在接口Closeable中關(guān)閉
指定者:
在接口 ObjectOutput 中關(guān)閉
覆蓋:
在類 OutputStream 中關(guān)閉
Throws:
Throw名稱 | Throw描述 |
---|---|
IOException | 如果發(fā)生 I/O 錯(cuò)誤。 |
public void writeBoolean(boolean val) throws IOException
寫(xiě)入一個(gè)布爾值。
指定者:
接口 DataOutput 中的 writeBoolean
參數(shù):
參數(shù)名稱 | 參數(shù)描述 |
---|---|
val | 要寫(xiě)入的布爾值 |
Throws:
Throw名稱 | Throw描述 |
---|---|
IOException | 如果在寫(xiě)入底層流時(shí)發(fā)生 I/O 錯(cuò)誤 |
public void writeByte(int val) throws IOException
寫(xiě)入一個(gè) 8 位字節(jié)。
指定者:
接口 DataOutput 中的 writeByte
參數(shù):
參數(shù)名稱 | 參數(shù)描述 |
---|---|
val | 要寫(xiě)入的字節(jié)值 |
Throws:
Throw名稱 | Throw描述 |
---|---|
IOException | 如果在寫(xiě)入底層流時(shí)發(fā)生 I/O 錯(cuò)誤 |
public void writeShort(int val) throws IOException
寫(xiě)入 16 位短。
指定者:
接口 DataOutput 中的 writeShort
參數(shù):
參數(shù)名稱 | 參數(shù)描述 |
---|---|
val | 要寫(xiě)入的短值 |
Throws:
Throw名稱 | Throw描述 |
---|---|
IOException | 如果在寫(xiě)入底層流時(shí)發(fā)生 I/O 錯(cuò)誤 |
public void writeChar(int val) throws IOException
寫(xiě)入一個(gè) 16 位字符。
指定者:
接口 DataOutput 中的 writeChar
參數(shù):
參數(shù)名稱 | 參數(shù)描述 |
---|---|
val | 要寫(xiě)入的 char 值 |
Throws:
Throw名稱 | Throw描述 |
---|---|
IOException | 如果在寫(xiě)入底層流時(shí)發(fā)生 I/O 錯(cuò)誤 |
public void writeInt(int val) throws IOException
寫(xiě)入一個(gè) 32 位整數(shù)。
指定者:
接口 DataOutput 中的 writeInt
參數(shù):
參數(shù)名稱 | 參數(shù)描述 |
---|---|
val | 要寫(xiě)入的整數(shù)值 |
Throws:
Throw名稱 | Throw描述 |
---|---|
IOException | 如果在寫(xiě)入底層流時(shí)發(fā)生 I/O 錯(cuò)誤 |
public void writeLong(long val) throws IOException
寫(xiě)入 64 位長(zhǎng)。
指定者:
接口 DataOutput 中的 writeLong
參數(shù):
參數(shù)名稱 | 參數(shù)描述 |
---|---|
val | 要寫(xiě)入的長(zhǎng)值 |
Throws:
Throw名稱 | Throw描述 |
---|---|
IOException | 如果在寫(xiě)入底層流時(shí)發(fā)生 I/O 錯(cuò)誤 |
public void writeFloat(float val) throws IOException
寫(xiě)入一個(gè) 32 位浮點(diǎn)數(shù)。
指定者:
接口 DataOutput 中的 writeFloat
參數(shù):
參數(shù)名稱 | 參數(shù)描述 |
---|---|
val | 要寫(xiě)入的浮點(diǎn)值 |
Throws:
Throw名稱 | Throw描述 |
---|---|
IOException | 如果在寫(xiě)入底層流時(shí)發(fā)生 I/O 錯(cuò)誤 |
public void writeDouble(double val) throws IOException
寫(xiě)入 64 位雙精度。
指定者:
接口 DataOutput 中的 writeDouble
參數(shù):
參數(shù)名稱 | 參數(shù)描述 |
---|---|
val | 要寫(xiě)入的雙精度值 |
Throws:
Throw名稱 | Throw描述 |
---|---|
IOException | 如果在寫(xiě)入底層流時(shí)發(fā)生 I/O 錯(cuò)誤 |
public void writeBytes(String str) throws IOException
將 String 作為字節(jié)序列寫(xiě)入。
指定者:
接口 DataOutput 中的 writeBytes
參數(shù):
參數(shù)名稱 | 參數(shù)描述 |
---|---|
str | 要寫(xiě)入的字節(jié)字符串 |
Throws:
Throw名稱 | Throw描述 |
---|---|
IOException | 如果在寫(xiě)入底層流時(shí)發(fā)生 I/O 錯(cuò)誤 |
public void writeChars(String str) throws IOException
將字符串寫(xiě)入字符序列。
指定者:
接口 DataOutput 中的 writeChars
參數(shù):
參數(shù)名稱 | 參數(shù)描述 |
---|---|
str | 要寫(xiě)入的字符串 |
Throws:
Throw名稱 | Throw描述 |
---|---|
IOException | 如果在寫(xiě)入底層流時(shí)發(fā)生 I/O 錯(cuò)誤 |
public void writeUTF(String str) throws IOException
以修改后的 UTF-8 格式寫(xiě)入此字符串的原始數(shù)據(jù)。 請(qǐng)注意,將字符串作為原始數(shù)據(jù)或作為對(duì)象寫(xiě)入流中存在顯著差異。 writeObject 寫(xiě)入的 String 實(shí)例最初作為 String 寫(xiě)入流中。 未來(lái)的 writeObject() 調(diào)用將字符串的引用寫(xiě)入流中。
指定者:
接口 DataOutput 中的 writeUTF
參數(shù):
參數(shù)名稱 | 參數(shù)描述 |
---|---|
str | 要寫(xiě)入的字符串 |
Throws:
Throw名稱 | Throw描述 |
---|---|
IOException | 如果在寫(xiě)入底層流時(shí)發(fā)生 I/O 錯(cuò)誤 |
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: