31.对象的序列化和反序列化

序列化和反序列化

  • 把对象转换为字节序列的过程称为对象的序列化。----写对象的过程
  • 把字节序列恢复为对象的过程称为对象的反序列化。----读对象的过程

步骤

  • 创建一个类,集成Serializable接口
  • 创建对象
  • 将对象写入文件
  • 从文件读取对象信息

使用到:

  • 对象输入流:ObjectInputStream
  • 对象输出流:ObjectOutputStream

ObjectInputStream

构造方法

  • ObjectInputStream()

为完全重新实现ObjectInputStream的子类提供一种方法,不必分配刚刚被ObjectInputStream实现使用的私有数据。

  • ObjectInputStream(InputStream in)

创建从指定的InputStream读取的ObjectInputStream。

常用方法

  • close()

关闭输入流。

  • read()

读取一个字节的数据。

  • read(byte[] buf, int off, int len)

读入一个字节数组。

  • read()

读取一个字节的数据。

  • read(byte[] buf, int off, int len)
    读入一个字节数组。
  • readBoolean()

读取布尔值。

  • readByte()

读取一个8位字节。

  • readChar()

读一个16位字符。

  • readDouble()

读64位双倍。

  • readInt()

读取一个32位int。

  • readLong()

读64位长。

  • readObject()

从ObjectInputStream读取一个对象。

  • readShort()

读取16位短。

ObjectOutputStream

构造方法

  • ObjectOutputStream()

为完全重新实现ObjectOutputStream的子类提供一种方法,不必分配刚刚被ObjectOutputStream实现使用的私有数据。

  • ObjectOutputStream(OutputStream out)

创建一个写入指定的OutputStream的ObjectOutputStream。

常用方法

  • close()

关闭流。

  • flush()

刷新流。

  • write(byte[] buf)

写入一个字节数组。

  • write(byte[] buf, int off, int len)

写入一个子字节数组。

  • write(int val)

写一个字节。

  • writeBoolean(boolean val)

写一个布尔值。

  • writeByte(int val)

写入一个8位字节。

  • writeBytes(String str)

写一个字符串作为字节序列。

  • writeChar(int val)

写一个16位的字符。

  • writeChars(String str)

写一个字符串作为一系列的字符。

  • writeDouble(double val)

写一个64位的双倍。

  • writeFields()

将缓冲的字段写入流。

  • writeFloat(float val)

写一个32位浮点数。

  • writeInt(int val)

写一个32位int。

  • writeLong(long val)

写一个64位长

  • writeObject(Object obj)

将指定的对象写入ObjectOutputStream。

  • writeShort(int val)

写一个16位短。

示例:

	public static void main(String[] args) {
		Goods goods1 = new Goods("gd0001", "电脑", 3000);
		try {
			FileOutputStream fos = new FileOutputStream("goodsList.txt");
			ObjectOutputStream oos = new ObjectOutputStream(fos);
			FileInputStream fis = new FileInputStream("goodsList.txt");
			ObjectInputStream ois = new ObjectInputStream(fis);
			// 对象的序列化,写入对象
			oos.writeObject(goods1);
			oos.writeBoolean(false);
			oos.flush();
			// 对象的反序列化,读对象
			System.out.println(ois.readObject());
			// 先读Goods对象,后读Boolean,顺序不可变,否则报错
			System.out.println(ois.readBoolean());
			
			fos.close();
			oos.close();
			fis.close();
			ois.close();
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		}catch (IOException e) {
			e.printStackTrace();
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		}
	}
上一篇:【转载】数字IC设计流程及开发工具


下一篇:2.本征矩阵 基本矩阵以及对极几何之间的约束关系