gpt4 book ai didi

java - 如果 BufferedWriter 已经关闭,为什么它会在关闭时抛出异常?

转载 作者:行者123 更新时间:2023-12-02 10:51:30 25 4
gpt4 key购买 nike

根据 Closeable.close 的 JavaDoc:

If the stream is already closed then invoking this method has no effect.

但是,在我的 BufferedWriter 类型的对象(实现 Closeable)上调用 close 后,我收到此错误:

java.io.IOException: Stream closed
at sun.nio.cs.StreamEncoder.ensureOpen(StreamEncoder.java:45)
at sun.nio.cs.StreamEncoder.write(StreamEncoder.java:118)
at java.io.OutputStreamWriter.write(OutputStreamWriter.java:207)
at java.io.BufferedWriter.flushBuffer(BufferedWriter.java:129)
at java.io.BufferedWriter.close(BufferedWriter.java:264)

这似乎与Closeable的约定相矛盾。我错过了什么吗?

最佳答案

实际上,根据堆栈跟踪,您似乎正在关闭一个 BufferedWriter:

  1. 已开放,
  2. 仍然有缓冲数据,并且
  3. 包装已关闭的底层流。

发生的情况是,在 BufferedWriter 上调用 close() 会导致它尝试刷新剩余的字符。如果包装的流/编写器已关闭,则无法完成此操作。

如果您使用 BufferedWriter 包装 WriterOutputStream,则不应直接调用 close()在包装的写入器/流上。

关于java - 如果 BufferedWriter 已经关闭,为什么它会在关闭时抛出异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34903642/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com