2、ObjectInputStream API简介:
A:构造方法
protected ObjectInputStream(); 用于完全重新实现ObjectInputStream的子类的构造方法、使得子类可以拥有自己的私有关键字节、而不是使用ObjectInputStream自带的字节。 ObjectInputStream(InputStream in); 创建从指定 InputStream 读取的 ObjectInputStream。
B:一般方法
int available(); 返回可以不受阻塞地读取的字节数。
void close(); 关闭输入流。
void defaultReadObject(); 从此流读取当前类状态的属性(没有被 static、transient修饰的字段)。
protected boolean enableResolveObject(boolean enable); 使流允许从该流读取的对象被替代。
int read(); 读取数据字节。
int read(byte[] buf, int off, int len); 读入 byte 数组。
boolean readBoolean(); 读取一个 boolean 值。
byte readByte(); 读取一个 8 位的字节。
char readChar(); 读取一个 16 位的 char 值。
protected ObjectStreamClass readClassDescriptor(); 从序列化流读取类描述符。
double readDouble(); 读取一个 64 位的 double 值。
ObjectInputStream.GetField readFields(); 按名称从流中读取持久字段并使其可用。
float readFloat(); 读取一个 32 位的 float 值。
void readFully(byte[] buf); 读取字节,同时阻塞直至读取所有字节。
void readFully(byte[] buf, int off, int len); 读取字节,同时阻塞直至读取所有字节。
int readInt(); 读取一个 32 位的 int 值。
String readLine(); 已过时。 此方法不能正确地将字节转换为字符。请参见 DataInputStream 以获取详细信息和替代方法。
long readLong(); 读取一个 64 位的 long 值。
Object readObject(); 从 ObjectInputStream 读取对象。
protected Object readObjectOverride(); 此方法由 ObjectOutputStream 的受信任子类调用,这些子类使用受保护的无参数构造方法构造 ObjectOutputStream。
short readShort(); 读取一个 16 位的 short 值。
protected void readStreamHeader(); 提供的 readStreamHeader 方法允许子类读取并验证它们自己的流头部。
Object readUnshared(); 从 ObjectInputStream 读取“非共享”对象。
int readUnsignedByte(); 读取一个无符号的 8 位字节。
int readUnsignedShort(); 读取一个无符号的 16 位 short 值。
String readUTF(); 读取 UTF-8 修改版格式的 String。
int skipBytes(int len); 跳过字节。
4、实例演示:
StudentDTO类:
package com.chy.io.original.utils;
import java.io.Serializable;
public class StudentDTO implements Serializable{
private static final long serialVersionUID = -4969451826117657169L;
private int sno = 1;
private String name = "chy";
private int statu = 5;
public StudentDTO(int sno, String name,int statu) {
super();
this.sno = sno;
this.name = name;
this.statu = statu;
}
public int getSno() {
return sno;
}
public void setSno(int sno) {
this.sno = sno;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getStatu() {
return statu;
}
public void setStatu(int statu) {
this.statu = statu;
}
}
测试类:
package com.chy.io.original.test;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import com.chy.io.original.utils.StudentDTO;
public class ObjectStreamTest {
private static File file = new File("D:\\oos.txt");
public static void testObjectOutputStream() throws IOException{
ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(file));
StudentDTO swrite = new StudentDTO(1, "chy", 5);
oos.writeObject(swrite);
}
public static void testObjectInputStream() throws IOException, ClassNotFoundException{
ObjectInputStream ois = new ObjectInputStream(new FileInputStream(file));
StudentDTO s = new StudentDTO(2, "chy1", 10