Java_io体系之ObjectInputStream、ObjectOutputStream简介、走进源码及示例――11(二)

2014-11-24 08:05:14 · 作者: · 浏览: 3
m写入到底层输出流中的对象、数组、字符串读取到程序中、并还原成当初写入时的状态、这样我们就可以直接对这个对象进行操作。从而达到操作java对象、数组、字符串的目的。

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