Java 中的 ClosedChannelException 及其示例

2025年3月17日 | 阅读 3 分钟

当一个 I/O 操作试图在一个已关闭的通道上执行,或者通道被关闭以至于无法进行预期的操作时,就会触发 ClosedChannelException。也就是说,如果抛出此异常,并不意味着通道完全关闭,仅仅是尝试的操作被阻塞了。

语法

以下是 ClosedChannelException 的层级结构:

ClosedChannelException in Java with Examples

在开始介绍类的功能之前,让我们先了解一下构造函数。

构造函数描述
ClosedChannelException()创建一个类实例

现在,让我们来谈谈 Throwable 类继承的方法。以下是它们的表格表示:

方法描述
addSuppressed(Throwable exception)为了能够发送此异常,将其添加到被抑制的异常列表中。
fillInStackTrace()此 Throwable 对象会填充执行堆栈跟踪,并存储有关运行线程的堆栈帧当前状态的信息。
getCause()返回此 Throwable 的原因,如果它没有已知的原因,则返回 null。
getLocalizedMessage()提供此 Throwable 的本地化描述。该描述可以被子类覆盖。如果子类没有覆盖此函数,则结果将与 getMessage() 相同。
getMessage()返回此 Throwable 的完整消息描述。
getStackTrace()返回一个堆栈跟踪元素数组,每个元素代表一个堆栈帧。提供对 printStackTrace() 打印的堆栈跟踪数据的访问。
getSuppressed()返回一个数组,其中包含所有被抑制的异常,以便此异常可以被抛出。
initCause(Throwable cause)将指定的值设置为 Throwable 的初始原因。
printStackTrace()此 Throwable 的回溯将被打印到错误输出流。
printStackTrace(PrintStream s)连同其回溯一起,将此 Throwable 打印到指定的 PrintStream。
printStackTrace(PrintWriter s)连同其回溯一起,将此 Throwable 打印到指定的 PrintWriter。
setStackTrace(StackTraceElement[] stackTrace)设置此 Throwable 的堆栈跟踪项。它允许客户端修改默认的堆栈跟踪,并用于复杂的系统和远程过程调用框架。
toString()以以下格式简要解释此 Throwable:该对象的类名:调用对象上的 getLocalizedMessage() 的结果。如果 getLocalizedMessage() 返回 null,则只返回类名。

在本例中,我们将创建一个通道,关闭它,然后尝试从一个已关闭的通道读取数据。这将导致 ClosedChannelException 的发生。步骤如下:

步骤 -1: 创建 RandomAccessFile 类,以便以读写模式("rw")打开系统中的文本文件。

步骤 -2: 现在,我们使用 FileChannel 类为打开的文件创建一个通道。

步骤 -3: 接下来,使用 ByteBuffer 类,我们创建一个缓冲区,用于从该通道读取字节数据。

步骤 -4: 此外,我们在 Charset 类中将编码方案定义为“US-ASCII”。

步骤 -5: 最后,我们在开始读取此文件之前关闭通道。

因此,当尝试在此通道上执行读取操作时,会抛出 ClosedChannelException。在这里,我们只是打印一条消息。我们在 catch 块中捕获异常,您可以在其中添加任何适合您需求的异常处理。

实施

文件名

输出

ClosedChannelException in Java with Examples