JAVA IO系列----ObjectInputStream和ObjectOutputStream类

转自:


http://blog.csdn.net/yitongfling/article/details/6320051

·ObjectInputStream和ObjectOutputStream这两个包装类,用于从底层输入流中读取对象类型的数据和对象类型的数据写入到底层输出流。将对象中所有成员变量的取值保存起来就等于保存了对象,将对象中所有成员变量的取值还原就相等于读取了对象。

·ObjectInputStream和ObjectOutputStream类所读写的对象必须实现了Serializable接口。对象中的transient(一种标记,表示变量是临时的)和static类型的成员变量不会被读取和写入。这两个类可以用于网络流中传送对象。

   ( transient:java语言的关键字,变量修饰符,如果用transient声明一个实例变量,当对象存储时,它的值不需要维持。

  Java的serialization提供了一种持久化对象实例的机制。当持久化对象时,可能有一个特殊的对象数据成员,我们不想用 serialization机制来保存它。为了在一个特定对象的一个域上关闭serialization,可以在这个域前加上关键字transient。当一个对象被串行化的时候,transient型变量的值不包括在串行化的表示中,然而非transient型的变量是被包括进去的。)

·一个可以被序列化的MyClass类的定义:

     public class MyClass implements Serializable{

             public transient Thread t;  //t不会被序列化

             private String customerID;

             private int total;

     }

·编程举例:创建一个可序列化的学生对象,并用ObjectOutputStream类把它存储到一个文件(mytext.txt)中,然后再用ObjectInputStream类把存储的数据读取到一个学生对象中,即恢复保存的学生对象。

import java.io.*;

class Student implements Serializable //必须实现Serializable接口才能序列化
	{
	int age;
	String name;
	Student(int age, String name){
		this.age = age;
		this.name = name;
	}
}
public class Iotest {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Student stu1 = new Student(20,"zhangsan");
		Student stu2 = new Student(22,"lisi");
		try {
			FileOutputStream fos = new FileOutputStream("a.txt");
			ObjectOutputStream oos = new ObjectOutputStream(fos);
			oos.writeObject(stu1);
			oos.writeObject(stu2);
			oos.close();
						
			FileInputStream fis = new FileInputStream("a.txt");
			ObjectInputStream ois = new ObjectInputStream(fis);
			Student stu3 = (Student) ois.readObject();
			System.out.println("age: "+stu3.age);
			System.out.println("name: "+stu3.name);
			
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
	}

}

<strong>字节流与字符流的转换</strong><p>·IO包中的流分为字节流和字符流,应用中经常需要互相转换。</p><p>·思考:能不能找到一种简单的方式来读取键盘上输入的一行字符?如何找?</p><p>   A:查找readLine方法,再通过JDK中的see also寻找接收参数为System.in类型的类。</p><p>·InputStreamReader和OutputStreamWriter是用于将字节流转换成字符流来读写的两个类,InputStreamReader可以将一个字节流中的字节解码成字符后读取,OutputStreamWriter将字符编码成字节后写入到一个字节流中。</p><p>·避免频繁地在字符与字节间进行转换,最好不要直接使用InputStreamReader和OutputStreamWriter类来读写数据,应尽量使用BufferedWriter类来包装OutputStreamWriter类,用BufferedReader类来包装InputStreamReader.
</p>


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值