Java SE 第8章流和文件--对象流

Java SE 第8章流和文件–对象流

一、ObjectOutputStream类实现对象的序列化,即把对象写入字节流。该类是OutputStream的子类。该类也实现了ObjectOutput接口(支持对象序列化)。

               该类的一个构造方法如下:

ObjectOutputStream(OutputStream OutStream)throws IOException
其中,参数OutStream是将被写入对象序列化的输出流。

                 该类常用的方法及功能:

final void writeObject(Object object) 写入一个obj到调用的流中
void writeInt(int i) 写入一个int到调用的流中
void writeBytes(String str) 写入代表str的字节到调用的流中
void writeChar(int c) 写入一个char到调用的流中

二、ObjectInputStream类实现对象的反序列化,即把对象从一个字节流中读取出来。该类是InputStream的子类。该类也实现了ObjectInput接口(支持对象序列化)。该类的一个构造方法如下:
ObjectInputStream(InputStream InputStream)throws IOException
其中,参数InputStream是将被写入对象序列化的输入流。

                该类常用的方法及功能:

final Object readObject 从流中读取对象
int readInt() 从流中读取一个32位的int值
String readUTF() 从流中读取UTF-8格式的字符串
Char readChar() 读取一个16位的char值

                这是一个Person对象

public class Person implements Serializable{
    
    
	private String idCard;
	private String name;
	private int age;
	public Person(String idCard,String name,int age){
    
    
		this.idCard=idCard;
		this.name=name;
		this.age=age;
	}
//get和set方法省略
}

注意:此Person对象实现了接口Serializable ,此接口中没有定义任何方法,它只是简单地指示一个类可以被序列化。如果一个类是可序列化的,则它的所有子类也是可序列化的。
Serializable接口定义如下:

public interface Serializable{
    
    
}

示例:利用ObjectOutputStream把上述Person类型的对象写入到文件(d:\Person.tmp)中。
1)创建一个ObjectOutputStream的对象
2)创建一个Person的对象
3)把对象写入到文件中
4)最后关闭流

package ch08;
import java.io.FileOutputStream;
import java.io.ObjectOutputStream;

public class ObjectOutputStreamDemo {
    
    

	public static void main(String[] args) {
    
    
			ObjectOutputStream obs=null;
		try{
    
    
			obs=new ObjectOutputStream(new FileOutputStream("d:\\Person.tmp"));1)
			Person person=new Person("121001","张三",25);2)
			obs.writeObject(person);3)
			obs.flush();
		}catch(Exception ex){
    
    
			ex.printStackTrace();
		}finally{
    
    
			try{
    
    
				if(obs!=null){
    
    
					obs.close();4}
			}catch(Exception ex){
    
    
				ex.printStackTrace();
			}
		}
	}
}

示例:利用ObjectInputStream从文件(d:\Person.tmp)中读取一个Person类型的对象。
1)创建一个ObjectInputStream对象
2)接收对象
3)打印
4)关闭流

package ch08;
import java.io.FileInputStream;
import java.io.ObjectInputStream;
public class ObjectInputStreamDemo {
    
    
	public static void main(String[] args) {
    
    
		// TODO Auto-generated method stub
		ObjectInputStream ois=null;
		try{
    
    
			ois = new ObjectInputStream(new FileInputStream("d:\\Person.tmp"));1)
			Object obj=ois.readObject();2if(obj!=null){
    
    
				Person person=(Person)obj;
				System.out.println("编号:"+person.getIdCard()3+"姓名:"+person.getName()
				+"年龄:"+person.getAge());
			}
		}catch(Exception ex){
    
    
			ex.printStackTrace();
		}finally{
    
    
			try{
    
    
				if(ois!=null){
    
    
					ois.close();4}
			}catch(Exception ex){
    
    
				ex.printStackTrace();
			}
		}
	}
}

效果图:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_45618376/article/details/111340954