📜  JavaObjectInputStream和ObjectOutputStream的区别(1)

📅  最后修改于: 2023-12-03 15:16:03.991000             🧑  作者: Mango

JavaObjectInputStream和ObjectOutputStream的区别

JavaObjectInputStream和ObjectOutputStream是Java语言提供的两个类,用于实现对象的序列化和反序列化。它们的使用方式和作用相同,但是它们有一些区别。

JavaObjectInputStream

JavaObjectInputStream是Java语言提供的一个对象输入流,它可以将字节数组转化为Java对象。它继承了InputStream和ObjectInput两个类,可以通过构造方法绑定任何输入流对象。

JavaObjectInputStream提供了以下方法:

  • readObject(): 从输入流中读取一个对象。
  • read(): 从输入流中读取下一个字节。
  • skip(long n): 跳过输入流中n个字节。
ObjectOutputStream

ObjectOutputStream是Java语言提供的一个对象输出流,它可以将Java对象转化为字节数组。它继承了OutputStream和ObjectOutput两个类,可以通过构造方法绑定任何输出流对象。

ObjectOutputStream提供了以下方法:

  • writeObject(Object obj): 将对象写入输出流。
  • write(int b): 将一个字节写入输出流。
  • flush(): 清空输出流。
区别

JavaObjectInputStream和ObjectOutputStream的主要区别是在输入输出流处理方面。

  • JavaObjectInputStream用于反序列化,可以将字节数组转化为Java对象。而ObjectOutputStream用于序列化,可以将Java对象转化为字节数组。
  • JavaObjectInputStream提供了read()和skip()等方法用于处理输入流中的字节,而ObjectOutputStream则提供了write()方法用于处理输出流中的字节。
  • JavaObjectInputStream可以通过构造方法绑定任何输入流对象,而ObjectOutputStream可以通过构造方法绑定任何输出流对象。
示例代码
// 使用JavaObjectInputStream反序列化
ByteArrayInputStream bis = new ByteArrayInputStream(bytes);
ObjectInputStream ois = new JavaObjectInputStream(bis);
Object obj = ois.readObject();

// 使用ObjectOutputStream序列化
ByteArrayOutputStream bos = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(bos);
oos.writeObject(obj);
byte[] bytes = bos.toByteArray();