ObjectOutputStream 和 ObjectInputStream类的简单介绍,及运用。

本文介绍了如何使用Java中的ObjectOutputStream和ObjectInputStream类来序列化和反序列化对象,包括常见构造方法和主要方法的使用,并通过示例代码展示了对象序列化的过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

以前在文件中写入数据的主要方式是用字符流或者字节流。但是如果想保存并读取一个对象,该怎么办?可以是用ObjectOutputStream类 和 ObjectInputStream类。

 

ObjecOutputStream类

常用构造方法:ObjectOutputStream oos = new ObjectOutputStream(OutputStream out);//创建一个写入指定OutputStream的ObjectOutputStream对象.

如:ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("F:\\obj.object"));

主要方法:void writeObject(Object obj);//将指定的对象写入ObjectOutputStream.对对象进行序列化。

注意:被写入的对象必须实现Serializable接口。

void write(byte[] buf);

void write(byte[] buf,int off,int len);

void write(int val);//写入一个字节。

void writeBoolean(boolean val);

void writeByte(int val);//写入一个八位字节。

void writeBytes(String str);//以字节序列形式写入一个String。

void writeChar(int val);//写入一个16位的char值。

viod writeChars(String str);//以char序列形式写入一个String。

viod writeUTF(String str);//以UTF-8修改版格式写入此String的基本数据。

ObjectInputStream类

常用构造方法:ObjectInputStream ois = new ObjectInputStream(InputStream in);//创建从指定 InputStream 读取的 ObjectInputStream。

如:ObjectInputStream ois = new ObjectInputStream(new FileInputStream("F:\\obj.object"));

主要方法:Object readObject();//从ObjectInputStream读取对象。由于其返回的是Object类型 需要对其进行强转。

int read();//读取单个字节。

int read(byte[] buf,int off,int len);//读入byte数组,返回读取字节的实际个数。

boolean readBoolean();//读取一个boolean值

byte readByte();//读取一个8位的字节。

char readChar();//读取一个16为的char值。

int readInt();读取一个32位的int值。

String readUTF();读取一个UTF-8 修改版格式的String.

代码如下:

person对象类

package ObjectStream;

import java.io.Serializable;
/**
 * 继承Serializable接口用于给该标示一个ID号。该id号有虚拟机根据该类运算得出。
 * 
 * 用于判断该类和obj对象文件是否 为同一个版本。当不为同一个版本时将会抛出无效类异常。
 * @author Administrator
 *
 */
public class Person implements Serializable/*标记接口*/{
	
	/**
	 * 由于在定义对象时需要定义一个静态final的long字段serialVersionUID。
	 * 如果不定义的话系统将根据该类各个方面进行计算该值,极容易导致读取异常。
	 */
	private static final long serialVersionUID = 5201314l;
//	static 和 transient修饰符修饰得都不会被写入到对象文件中去。
	//非瞬态和非静态字段的值都将被写入
	private String name;
	private int age;
	public Person(String name, int age) {
		super();
		this.name = name;
		this.age = age;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	
}

主程序

package ObjectStream;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;

public class ObjectStreamDemo {

	/**
	 * @param args
	 * @throws IOException 
	 * @throws FileNotFoundException 
	 * @throws ClassNotFoundException 
	 */
	public static void main(String[] args) throws IOException, ClassNotFoundException {
		
		writeMethod();
//		readMethod();

	}

	public static void readMethod() throws IOException, ClassNotFoundException {
		
		ObjectInputStream ois = new ObjectInputStream(new FileInputStream("F:\\obj.object"));
		Person p = (Person)ois.readObject();		
		System.out.println(p.getName()+" : "+p.getAge());
		 p = (Person)ois.readObject();		
		System.out.println(p.getName()+" : "+p.getAge());
		 p = (Person)ois.readObject();		
		System.out.println(p.getName()+" : "+p.getAge());
		 p = (Person)ois.readObject();		
		System.out.println(p.getName()+" : "+p.getAge());
		
		
	}

	public static void writeMethod() throws IOException, FileNotFoundException {
		ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("F:\\obj.object"));
		//对象序列化。  被序列化的对象必须实现Serializable接口。 
		oos.writeObject(new Person("小强",20));
		oos.writeObject(new Person("小明",26));
		oos.writeObject(new Person("小李",25));
		oos.writeObject(new Person("李煜",19));
		oos.close();
	}

}


 

(一)基础知识 【考试要求】 了解 Java 语言的历史特点;掌握 Java 的程序结构及开发环境的搭建;熟悉 Java 语言 的各种数据型;掌握变量常量的定义方法;掌握基本数据型的转换;掌握运算符与表达式的运用;熟悉 Java 的编码规范。 【主要考点】 1.Java 语言的历史、现状、特点、基本程序结构以及编程环境的搭建 2.Java 语言的数据型: (1)基本数据型:byte、short、int、long、float、double、char、boolean (2)引用数据型:、接口、数组 3.常量变量 常量的各种表示形式型,变量的定义初始化 4.数据型转换 显示转换,隐式转换 5.运算符 赋值运算符、算术运算符、自增/减运算符、关系运算符、逻辑运算符、位运算符、条件 运算符等 6.表达式 表达式的组成规则,表达式运算中的型转换、优先级结合性 7.Java 编程规范 (二)流程控制结构 【考试要求】 熟悉流程控制分为顺序结构、选择结构循环结构,掌握选择结构循环结构的具体实 现。 【主要考点】 1.Java 程序的基本结构 2.选择结构 (1)if 语句 (2)switch 语句 3.循环结构 (1)for 语句 (2)while 语句 (3)do-while 语句 4.跳转语句 (1)break 语句 (2)continue 语句 (3)return 语句 5.循环语句与分支语句的嵌套 (三)面向对象程序设计 【考试要求】 掌握面向对象程序设计的特点基本概念;掌握的声明;掌握对象的创建使用;掌 握继承多态的概念应用;掌握接口的声明实现;掌握包的声明、包与的引入;掌握 Java 库常用的使用 【主要考点】 1.面向对象程序设计的基本概念 、对象、成员变量、成员方法、封装、继承、多态 2.的基本组成 (1)的声明 (2)成员变量的声明 (3)成员方法的声明与调用,方法的参数传递与返回值 (4)方法的重载 (5)静态变量静态方法 3.对象的创建使用 (1)对象的创建 (2)构造方法与对象的初始化 (3)成员变量、成员方法的访问 (4)this (5)引用的赋值 4.的继承 (1)子的声明 (2)super (3)变量覆盖方法覆盖 (4)final final 方法 5.及成员的四种访问权限 (1)的访问权限:默认权限、public (2)成员的访问权限:public、private、protected、默认权限 6.抽象与接口 (1)abstract abstract 方法的声明 (2)接口的声明与实现 7.包 (1)包的声明及 package 语句 (2)包的引入及 import 语句 8.常用的使用 (1)String 字符串的基本操作:对象创建,字符串的比较,字符的访问与查找,子串 的查找,字符串的连接。 (2)StringBuffer 字符串的基本操作:对象创建,字符串的修改,与 String 字符串 的相互转换。 (3)Math Random 的常用方法。 (4)基本型的包装及其常用方法。 (5)了解 Object Class 。 (四)数组 【考试要求】 掌握一维数组、二维数组的声明、创建与使用。 【主要考点】 1.数组的声明、创建初始化 2.数组的大小元素默认值 3.数组元素的使用 (五)图形用户界面程序设计 【考试要求】 掌握 AWT Swing 常用组件与容器的使用方法;掌握窗口应用程序的构建方法;掌握 常用布局管理器的使用方法;掌握常用事件的处理方法。 【主要考点】 1.常用组件容器的创建使用 标签、文本框、按钮、文本区域、复选框、单选钮、下拉列表、列表、定时器、窗口、 面板、对话框、文件选择器 JFileChooser、颜色选择器 JColorChooser 等。 2.常用布局管理器的使用 FlowLayout、BorderLayout、GridLayout、CardLayout 3.事件处理模型与常见事件的处理 (1)事件、事件源、事件处理者及事件处理模型; (2)WindowEvent、ActionEvent、ItemEvent、KeyEvent、MouseEvent、FocusEvent、TextEvent 的处理。 (六)异常处理 【考试要求】 理解异常处理机制;熟悉常用异常;掌握用 try-catch-finally 语句捕获异常;掌握抛出 异常声明抛出异常;掌握自定义异常的声明使用。 【主要考点】 1 异常的概念 2.常用的异常 3.异常的捕获与处理:try-catch-finally 4.异常的抛出:throw 语句,throws 子句 5.自定义异常 (七)输入输出流及文件操作 【考试要求】 理解输入输出流的概念;熟悉流的分;掌握常用流的使用方法;掌握系统标准输入 输出的使用方法;掌握用 Scanner 输入数据的方法;掌握用 File 管理文件目录的方 法;掌握用 RandomAccessFile 读写随机访问文件的方法。 【主要考点】 1.流的分 输入流与输出流,字节流与字符流,节点流与过滤流 2.常用流 (1) 常 用 字 节 流 : FileInputStream 、 FileOutputStream 、 ByteArrayInputStream 、 ByteArrayOutputStream 、 BufferedInputStream 、 BufferedOutputStream 、 DataInputStream 、 DataOutputStream、ObjectInputStreamObjectOutputStream、PrintStream (2)常用字符流:FileReader、FileWriter、CharArrayReader、CharArrayWriter、StringReader、 StringWriter、BufferedReader、BufferedWriter、InputStreamReader、OutputStreamWriter 3.系统标准输入输出操作 4.File 文件创建、文件删除、文件夹创建、目录列表、文件属性获取设置、文件重命名 5.RandomAccessFile (八)高级编程基础 【考试要求】 理解多线程程序设计的概念;掌握线程的创建、生命周期、调度控制;了解线程的同 步。 【主要考点】 多线程 1.多线程的概念 2.线程的创建 3.线程的生命周期、调度基本控制 4.线程的同步
03-25
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值