| 返回类型 | 方法描述 |
|---|---|
| protected void | annotateClass(类<?> cl)
子类可以实现此方法,以允许类数据存储在流中。 |
| protected void | annotateProxyClass(类<?> cl)
子类可以实现这种方法来存储流中的自定义数据以及动态代理类的描述符。 |
| void | close()
关闭流。 |
| void | defaultWriteObject()
将当前类的非静态和非瞬态字段写入此流。 |
| protected void | drain()
排除ObjectOutputStream中的缓冲数据。 |
| protected boolean | enableReplaceObject(boolean enable)
启用流来替换流中的对象。 |
| void | flush()
刷新流。 |
| ObjectOutputStream.PutField | putFields()
检索用于缓冲要写入流的持久性字段的对象。 |
| protected Object | replaceObject(Object obj)
该方法将允许ObjectOutputStream的可信子类在序列化期间将一个对象替换为另一个对象。 |
| void | reset()
复位将忽略已写入流的任何对象的状态。 |
| void | useProtocolVersion(int version)
指定在编写流时使用的流协议版本。 |
| void | write(byte[] buf)
写入一个字节数组。 |
| void | write(byte[] buf, int off, int len)
写入一个子字节数组。 |
| void | write(int val)
写一个字节。 |
| void | writeBoolean(boolean val)
写一个布尔值。 |
| void | writeByte(int val)
写入一个8位字节。 |
| void | writeBytes(String str)
写一个字符串作为字节序列。 |
| void | writeChar(int val)
写一个16位的字符。 |
| void | writeChars(String str)
写一个字符串作为一系列的字符。 |
| protected void | writeClassDescriptor(ObjectStreamClass desc)
将指定的类描述符写入ObjectOutputStream。 |
| void | writeDouble(double val)
写一个64位的双倍。 |
| void | writeFields()
将缓冲的字段写入流。 |
| void | writeFloat(float val)
写一个32位浮点数。 |
| void | writeInt(int val)
写一个32位int。 |
| void | writeLong(long val)
写一个64位长 |
| void | writeObject(Object obj)
将指定的对象写入ObjectOutputStream。 |
| protected void | writeObjectOverride(Object obj)
子类使用的方法来覆盖默认的writeObject方法。 |
| void | writeShort(int val)
写一个16位短。 |
| protected void | writeStreamHeader()
提供了writeStreamHeader方法,因此子类可以在流中附加或预先添加自己的头。 |
| void | writeUnshared(Object obj)
将“非共享”对象写入ObjectOutputStream。 |
| void | writeUTF(String str)
此字符串的原始数据写入格式为 modified UTF-8 。 |
| 返回类型 | 方法描述 |
|---|---|
| int | available()
返回可以读取而不阻塞的字节数。 |
| void | close()
关闭输入流。 |
| void | defaultReadObject()
从此流读取当前类的非静态和非瞬态字段。 |
| protected boolean | enableResolveObject(boolean enable)
启用流以允许从流中读取的对象被替换。 |
| int | read()
读取一个字节的数据。 |
| int | read(byte[] buf, int off, int len)
读入一个字节数组。 |
| boolean | readBoolean()
读取布尔值。 |
| byte | readByte()
读取一个8位字节。 |
| char | readChar()
读一个16位字符。 |
| protected ObjectStreamClass | readClassDescriptor()
从序列化流读取类描述符。 |
| double | readDouble()
读64位双倍。 |
| ObjectInputStream.GetField | readFields()
从流中读取持久性字段,并通过名称获取它们。 |
| float | readFloat()
读32位浮点数。 |
| void | readFully(byte[] buf)
读取字节,阻塞直到读取所有字节。 |
| void | readFully(byte[] buf, int off, int len)
读取字节,阻塞直到读取所有字节。 |
| int | readInt()
读取一个32位int。 |
| String | readLine()
已弃用 此方法无法将字节正确转换为字符。 有关详细信息和替代方案,请参阅DataInputStream。 |
| long | readLong()
读64位长。 |
| Object | readObject()
从ObjectInputStream读取一个对象。 |
| protected Object | readObjectOverride()
此方法由ObjectOutputStream的受信任子类调用,该子类使用受保护的无参构造函数构造ObjectOutputStream。 |
| short | readShort()
读取16位短。 |
| protected void | readStreamHeader()
提供了readStreamHeader方法来允许子类读取和验证自己的流标题。 |
| Object | readUnshared()
从ObjectInputStream读取一个“非共享”对象。 |
| int | readUnsignedByte()
读取一个无符号的8位字节。 |
| int | readUnsignedShort()
读取无符号16位短。 |
| String | readUTF()
以 modified UTF-8格式读取字符串。 |
| void | registerValidation(ObjectInputValidation obj, int prio)
在返回图之前注册要验证的对象。 |
| protected 类<?> | resolveClass(ObjectStreamClass desc)
加载本地类等效的指定流类描述。 |
| protected Object | resolveObject(Object obj)
此方法将允许ObjectInputStream的受信任子类在反序列化期间将一个对象替换为另一个对象。 |
| protected 类<?> | resolveProxyClass(String[] interfaces)
返回一个代理类,它实现代理类描述符中命名的接口; 子类可以实现此方法从流中读取自定义数据以及动态代理类的描述符,从而允许它们为接口和代理类使用备用加载机制。 |
| int | skipBytes(int len)
跳过字节。 |
实现序列化对象类User: public class User implements Serializable { private static final long serialVersionUID = 1L; private String Id; private String Name; public User(String Id, String Name) { this.Id = Id; this.Name = Name; } } 注: 1.Java官方强烈建议所有要序列化的类都显示地声明serialVersionUID字段, 因为如果高度依赖于JVM默认生成serialVersionUID, 可能会导致其与编译器的实现细节耦合, 这样可能会导致在反序列化的过程中发生意外的InvalidClassException异常。 2.serialVersionUID字段地声明使用private关键字修饰,因为该字段只是一个声明 3.数组类是不能显示地声明serialVersionUID的,因为它们始终具有默认计算的值 序列化写入文件:(将User对象作为文本写入磁盘) User user = new User("100", "li"); try { FileOutputStream filepath = new FileOutputStream("d://user//user.txt"); ObjectOutputStream objectOutputStream = new ObjectOutputStream(filepath); objectOutputStream.writeObject(user); //写入磁盘 objectOutputStream.close(); //关闭流 } catch (IOException e) { e.printStackTrace(); //在命令行打印异常信息在程序中出错的位置及原因 } 反序列化读取文件:(将序列化文件转化为对象) try { FileOutputStream filepath = new FileOutputStream("d://user//user.txt"); ObjectInputStream objectInputStream = new ObjectInputStream(filepath); Object object = objectInputStream.readObject(); User user = (User) object; System.out.println(user); }catch(ClassNotFoundException e) { e.printStackTrace(); }