Java ObjectInputStream Class

2025年5月9日 | 阅读 12 分钟

java.io.ObjectInputStream 类用于反序列化先前使用 ObjectOutputStream 序列化的对象和原始数据。它允许重建对象图,并确保序列化对象的类与当前 JVM (Java 虚拟机) 的类定义兼容。

ObjectOutputStreamObjectInputStream 协同工作以保存和访问 对象 图。尽管如此,只有实现 Serializable 或 Externalizable 接口的项才能从流中检索。如果找到不可序列化的项,将发生错误。Serializable 接口充当标记,指示 JVM 将对象的当前状态记录到流中。

类声明

构造函数

  1. protected ObjectInputStream():构造方法 用于允许子类在不分配其私有数据的情况下重新实现 ObjectInputStream。
  2. ObjectInputStream(InputStream in): 它创建一个 ObjectInputStream,用于从指定的输入流 (in) 读取数据。

ObjectOutputStream 类的方法

read() 方法

java.io.ObjectInputStream 的 read() 方法从流中读取一个字节的数据,如果没有可用数据则会阻塞。

语法

参数

无。

返回值

  • 返回读取的字节数据,如果到达流的末尾则返回 -1。

异常

  • IOException:如果发生 I/O 错误,则抛出此异常。

readBoolean() 方法

java.io.ObjectInputStream 的 readBoolean() 方法 从流中读取一个布尔值。

语法

参数

无。

返回值

  • 返回从流中读取的布尔值。

异常

  • IOException:如果发生 I/O 错误,则抛出此异常。
  • EOFException:如果意外到达流的末尾,则抛出此异常。

输出

 
Byte value read: A
Boolean value read: true   

read(byte[] buffer, int offset, int maxlen) 方法

java.io.ObjectInputStream 的 read(byte[] buffer, int offset, int maxlen) 方法从输入流中读取指定数量的字节到字节 数组 中。

语法

参数

  • buffer: 数据将存储的字节数组。
  • offset: 数据将存储在字节数组中的起始位置。
  • maxlen: 要读取的最大字节数。

返回值

  • 实际读取的字节数。
  • 如果到达流的末尾,则返回 -1。

异常

  • IOException: 如果在读取过程中发生 I/O 错误,则抛出此异常。

输出

 
Bytes read: 13
Data read: Hello, World!   

readByte() 方法

java.io.ObjectInputStream 的 readByte() 方法从输入流中读取一个 8 位字节。

语法

参数

  • 无。

返回值

  • 返回一个 8 位有符号整数形式的字节值(-128 到 127)。

异常

  • IOException: 如果在读取过程中发生 I/O 错误,则抛出此异常。
  • EOFException: 如果意外到达流的末尾,则抛出此异常。

readChar() 方法

从流中读取单个 16 位 Unicode 字符。

语法

返回值: 字符值。

异常

  • IOException: 如果发生 I/O 错误。
  • EOFException: 如果到达流的末尾。

readDouble() 方法

从流中读取一个 8 字节(64 位)的 double 值。

语法

返回值: double 值。

异常

  • IOException: 如果发生 I/O 错误。
  • EOFException: 如果到达流的末尾。

readFloat() 方法

从流中读取一个 4 字节(32 位)的浮点值。

语法

返回值: float 值。

异常

  • IOException: 如果发生 I/O 错误。
  • EOFException: 如果到达流的末尾。

readInt() 方法

从流中读取一个 4 字节(32 位)的整数值。

语法

返回值: int 值。

异常

  • IOException: 如果发生 I/O 错误。
  • EOFException: 如果到达流的末尾。

readLong() 方法

从流中读取一个 8 字节(64 位)的 long 值。

语法

返回值: long 值。

异常

  • IOException: 如果发生 I/O 错误。
  • EOFException: 如果到达流的末尾。

输出

 
Data written to file successfully.
Character read: Z
Byte read: 127
Double read: 1234.56
Float read: 12.34
Integer read: 100
Long read: 123456789   

readUnsignedByte() 方法

从流中读取一个 8 位无符号字节,并将其作为整数值返回。

语法

返回值

  • 一个 0 到 255 范围内的 int。

异常

  • IOException: 如果发生 I/O 错误。

readUnsignedShort() 方法

从流中读取一个 16 位无符号 short,并将其作为整数值返回。

语法

返回值

  • 一个 0 到 65535 范围内的 int。

异常

  • IOException: 如果发生 I/O 错误。
  • EOFException: 如果到达流的末尾。

输出

 
Data written to file successfully.
Unsigned Byte read: 200
Unsigned Short read: 60000   

readUTF() 方法

ObjectInputStream 类中的 readUTF() 方法用于读取使用修改后的 UTF-8 格式编码的字符串。它通常用于读取 ObjectOutputStream 的 writeUTF() 方法写入的字符串。

语法

描述

  • 读取使用修改后的 UTF-8 格式编码的字符串。
  • 此方法确保在读取 writeUTF() 写入的字符串时具有兼容性。

返回值

  • 该方法返回从流中读取的 String。

异常

  1. IOException: 如果发生 I/O 错误。
  2. EOFException: 如果在读取完整 字符串 之前到达流的末尾。
  3. UTFDataFormatException: 如果 UTF-8 数据格式错误。

文件名:UTFReadExample.java

输出

 
Result from readUTF(): LearningWithExamples   

skipBytes(int maxlen) 方法

ObjectInputStream 中的 skipBytes(int n) 方法用于跳过输入流中指定数量的字节。当您想在读取时绕过数据的某些部分时,此方法特别有用。

语法

参数

  • n: 要跳过的字节数。

返回值

  • 实际跳过的字节数,如果到达文件末尾之前跳过的字节数少于 n,则可能小于 n。

异常

  1. IOException: 如果在跳过字节时发生 I/O 错误。

输出

 
ingBytesHere   

readFully(byte[] destination) 方法

ObjectInputStream 类中的 readFully(byte[] destination) 方法从输入流中读取数据并完全填充提供的字节数组。此方法会阻塞,直到读取完数组中的所有字节或抛出异常。

语法

参数

  • destination: 数据将存储的字节数组。

返回值

  • 此方法不返回值,因为它直接将数据写入提供的字节数组。

异常

  1. IOException: 如果发生 I/O 错误。
  2. EOFException: 如果在读取指定数量的字节之前到达流的末尾。

输出

 
Data read using readFully: JavaIsAwesome   

readFully(byte[] destination, int offset, int maxlen) 方法

ObjectInputStream 类中的 readFully(byte[] destination, int offset, int maxlen) 方法从输入流中读取指定数量的字节,并将它们写入提供的字节 数组 的特定部分。此方法会阻塞,直到完全读取请求的字节或抛出异常。

语法

参数

  1. destination: 数据将存储的字节数组。
  2. offset: 数组中开始写入数据的起始位置。
  3. maxlen: 要从输入流中读取的字节数。

异常

  1. IOException: 如果发生 I/O 错误。
  2. EOFException: 如果在读取指定数量的字节之前到达流的末尾。
  3. IndexOutOfBoundsException: 如果指定的偏移量和长度超出了字节数组的大小。

文件名:ReadFullyWithOffsetExample.java

输出

 
Buffer content:
  H  e  l  l  o     

下一个主题Java 框架