ObjectInputStream 和 ObjectOutputStream 介紹_動力節(jié)點Java學(xué)院整理
ObjectInputStream 和 ObjectOutputStream 的作用是,對基本數(shù)據(jù)和對象進(jìn)行序列化操作支持。
創(chuàng)建“文件輸出流”對應(yīng)的ObjectOutputStream對象,該ObjectOutputStream對象能提供對“基本數(shù)據(jù)或?qū)ο蟆钡某志么鎯?;?dāng)我們需要讀取這些存儲的“基本數(shù)據(jù)或?qū)ο蟆睍r,可以創(chuàng)建“文件輸入流”對應(yīng)的ObjectInputStream,進(jìn)而讀取出這些“基本數(shù)據(jù)或?qū)ο蟆薄?/p>
注意: 只有支持 java.io.Serializable 或 java.io.Externalizable 接口的對象才能被ObjectInputStream/ObjectOutputStream所操作!
ObjectOutputStream 函數(shù)列表
// 構(gòu)造函數(shù) ObjectOutputStream(OutputStream output) // public函數(shù) void close() void defaultWriteObject() void flush() ObjectOutputStream.PutField putFields() void reset() void useProtocolVersion(int version) void write(int value) void write(byte[] buffer, int offset, int length) void writeBoolean(boolean value) void writeByte(int value) void writeBytes(String value) void writeChar(int value) void writeChars(String value) void writeDouble(double value) void writeFields() void writeFloat(float value) void writeInt(int value) void writeLong(long value) final void writeObject(Object object) void writeShort(int value) void writeUTF(String value) void writeUnshared(Object object) ObjectInputStream 函數(shù)列表 // 構(gòu)造函數(shù) ObjectInputStream(InputStream input) int available() void close() void defaultReadObject() int read(byte[] buffer, int offset, int length) int read() boolean readBoolean() byte readByte() char readChar() double readDouble() ObjectInputStream.GetField readFields() float readFloat() void readFully(byte[] dst) void readFully(byte[] dst, int offset, int byteCount) int readInt() String readLine() long readLong() final Object readObject() short readShort() String readUTF() Object readUnshared() int readUnsignedByte() int readUnsignedShort() synchronized void registerValidation(ObjectInputValidation object, int priority) int skipBytes(int length)
演示程序
源碼如下(ObjectStreamTest.java):
/** * ObjectInputStream 和 ObjectOutputStream 測試程序 * * 注意:通過ObjectInputStream, ObjectOutputStream操作的對象,必須是實現(xiàn)了Serializable或Externalizable序列化接口的類的實例。 * * */ import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.io.Serializable; import java.util.Map; import java.util.HashMap; import java.util.Iterator; public class ObjectStreamTest { private static final String TMP_FILE = "box.tmp"; public static void main(String[] args) { testWrite(); testRead(); } /** * ObjectOutputStream 測試函數(shù) */ private static void testWrite() { try { ObjectOutputStream out = new ObjectOutputStream( new FileOutputStream(TMP_FILE)); out.writeBoolean(true); out.writeByte((byte)65); out.writeChar('a'); out.writeInt(20131015); out.writeFloat(3.14F); out.writeDouble(1.414D); // 寫入HashMap對象 HashMap map = new HashMap(); map.put("one", "red"); map.put("two", "green"); map.put("three", "blue"); out.writeObject(map); // 寫入自定義的Box對象,Box實現(xiàn)了Serializable接口 Box box = new Box("desk", 80, 48); out.writeObject(box); out.close(); } catch (Exception ex) { ex.printStackTrace(); } } /** * ObjectInputStream 測試函數(shù) */ private static void testRead() { try { ObjectInputStream in = new ObjectInputStream( new FileInputStream(TMP_FILE)); System.out.printf("boolean:%b\n" , in.readBoolean()); System.out.printf("byte:%d\n" , (in.readByte()&0xff)); System.out.printf("char:%c\n" , in.readChar()); System.out.printf("int:%d\n" , in.readInt()); System.out.printf("float:%f\n" , in.readFloat()); System.out.printf("double:%f\n" , in.readDouble()); // 讀取HashMap對象 HashMap map = (HashMap) in.readObject(); Iterator iter = map.entrySet().iterator(); while (iter.hasNext()) { Map.Entry entry = (Map.Entry)iter.next(); System.out.printf("%-6s -- %s\n" , entry.getKey(), entry.getValue()); } // 讀取Box對象,Box實現(xiàn)了Serializable接口 Box box = (Box) in.readObject(); System.out.println("box: " + box); in.close(); } catch (Exception e) { e.printStackTrace(); } } } class Box implements Serializable { private int width; private int height; private String name; public Box(String name, int width, int height) { this.name = name; this.width = width; this.height = height; } @Override public String toString() { return "["+name+": ("+width+", "+height+") ]"; } }
運(yùn)行結(jié)果:
boolean:true byte:65 char:a int:20131015 float:3.140000 double:1.414000 two -- green one -- red three -- blue box: [desk: (80, 48) ]
以上所述是小編給大家介紹的ObjectInputStream 和 ObjectOutputStream 的相關(guān)知識,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!
相關(guān)文章
Java日常練習(xí)題,每天進(jìn)步一點點(61)
下面小編就為大家?guī)硪黄狫ava基礎(chǔ)的幾道練習(xí)題(分享)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧,希望可以幫到你2021-08-08Java中的clone方法詳解_動力節(jié)點Java學(xué)院整理
clone顧名思義就是復(fù)制, 在Java語言中, clone方法被對象調(diào)用,所以會復(fù)制對象。下面通過本文給大家介紹java中的clone方法,感興趣的朋友一起看看吧2017-06-06記錄一個使用Spring?Data?JPA設(shè)置默認(rèn)值的問題
這篇文章主要介紹了使用Spring?Data?JPA設(shè)置默認(rèn)值的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-11-11使用JVMTI實現(xiàn)SpringBoot的jar加密,防止反編譯
這篇文章主要介紹了使用JVMTI實現(xiàn)SpringBoot的jar加密,防止反編譯問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-08-08SpringBoot 使用Mongo的GridFs實現(xiàn)分布式文件存儲操作
這篇文章主要介紹了Spring Boot 使用Mongo的GridFs實現(xiàn)分布式文件存儲操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-10-10