我正在使用JAI读取Java中的Tiff文件.

使用此代码:

RenderedOp renderer = JAI.create("fileload", tifFilename);

return renderer.getAsBufferedImage();

在使用Java 7的一个盒子上工作正常,但在使用Java 8的其他盒子上工作得很好:

Caused by: com.sun.media.jai.codecimpl.util.ImagingException

at com.sun.media.jai.codecimpl.ImagingListenerProxy.errorOccurred(ImagingListenerProxy.java:63)

at com.sun.media.jai.codecimpl.TIFFImage.getTile(TIFFImage.java:1087)

at javax.media.jai.RenderedImageAdapter.getTile(RenderedImageAdapter.java:148)

at javax.media.jai.NullOpImage.computeTile(NullOpImage.java:162)

at com.sun.media.jai.util.SunTileScheduler.scheduleTile(SunTileScheduler.java:904)

at javax.media.jai.OpImage.getTile(OpImage.java:1129)

at javax.media.jai.PlanarImage.copyData(PlanarImage.java:2343)

at javax.media.jai.RenderedImageAdapter.copyData(RenderedImageAdapter.java:163)

at javax.media.jai.RenderedOp.copyData(RenderedOp.java:2299)

at javax.media.jai.PlanarImage.getAsBufferedImage(PlanarImage.java:2525)

at javax.media.jai.PlanarImage.getAsBufferedImage(PlanarImage.java:2546)

at ...

Caused by: com.sun.media.jai.codecimpl.util.ImagingException: IOException occured while reading TIFF image data.

... 17 more

Caused by: java.io.IOException: Stream Closed

at java.io.RandomAccessFile.seek0(Native Method)

at java.io.RandomAccessFile.seek(RandomAccessFile.java:557)

at com.sun.media.jai.codec.FileSeekableStream.read(FileSeekableStream.java:168)

at com.sun.media.jai.codec.SeekableStream.readFully(SeekableStream.java:318)

at com.sun.media.jai.codecimpl.TIFFImage.getTile(TIFFImage.java:1081)

... 16 more

解决方法:

我的理论是,垃圾回收正在启动并完成一些本不该进行的工作.很奇怪.替换为:

try (SeekableStream seekableStream = new FileSeekableStream(filename)){

TIFFDecodeParam param = null;

ImageDecoder dec = ImageCodec.createImageDecoder("tiff", seekableStream, param);

// convert to buffered image if desired

return new RenderedImageAdapter(dec.decodeAsRenderedImage()).getAsBufferedImage(); // convert to buffered image

}

问题似乎消失了.我的猜测是,因为FileSeekableStream的句柄保留在局部变量范围内,所以未过早收集它.可能还有其他JAI方法也可以做到这一点,只要确保在输入流上保留自己的句柄即可[?]

不确定是否也适用于其他图像格式

标签:java,garbage-collection,jai

来源: https://codeday.me/bug/20191013/1909758.html

java关闭文件句柄_java-JAI关闭文件句柄为时过早吗?相关推荐

  1. java 关闭时_java – 活动关闭时服务停止

    我已经阅读了一些与这个问题相关的答案,它们似乎都是一样的: "使用START_STICKY运行您的服务" "在前台运行您的服务" "使用startSe ...

  2. java 自定义 钩子_Java添加关闭钩子里面的方法

    在我的代码中,我使用CompletionService和ExecutorService来启动一堆Thread来执行某些任务(这可能需要很长时间) . 所以我有一个创建ExecutorService和C ...

  3. Java中的接口命名[关闭]

    本文翻译自:Interface naming in Java [closed] Most OO languages prefix their interface names with a capita ...

  4. java 关闭dos_java批处理启动 关闭

    简单批处理文件 @echo off title 1.bat d: cd !cd! start cmd /c "title DataCenter && java -jar Da ...

  5. java.io.IOException: 远程主机强迫关闭了一个现有的连接。

    参考文档: (2条消息) 解决redis中java.io.IOException: 远程主机强迫关闭了一个现有的连接_zeal9s的博客-CSDN博客_redis远程主机强迫关闭了一个现有连接怎么解决 ...

  6. java.io.IOException: 远程主机强迫关闭了一个现有的连接

    摆脱烦恼最有效的是慢思考,为什么和我想的不一样,出入在哪里,什么导致的? 疑惑 我使用netty框架接受数据,每隔半个小时存储数据,运行不到三个小时报错 java.io.IOException: 远程 ...

  7. 关于Redis出现“java.io.IOException: 远程主机强迫关闭了一个现有的连接”的一次排查

    背景 最近在使用springboot(Windows下)连接redis(云服务器)开发时发现一些问题:连接成功的情况下,在一段时间未交互数据后,再次通过连接与Redis传输数据回出现异常java.io ...

  8. 强制关闭java的输出,关闭err输出,关闭out输出

    强制关闭java的输出,关闭err输出,关闭out输出 public static void main(String[] args) {System.err.println("错误日志输出& ...

  9. SpringBoot整合Redis:java.io.IOException: 远程主机强迫关闭了一个现有的连接。或者控制台报连接超时异常

    场景: 项目启动过后 Redis 连接过一会就会断开,报如下问题: 问题1: 2022-12-05 23:05:18.287 ERROR 10752 --- [sson-netty-1-11] o.r ...

  10. java io操作_Java IO 操作

    IO操作 Java对数据的操作都是通过流的方式,IO流用来处理设备之间的数据传输,文件上传和文件下载,Java用于操作流的对象都在IO包,NIO(New IO)包中. 创建文件 Java创建文件的方式 ...

最新文章

  1. Taylayout 底部的滑动线高度设置
  2. 战术上的勤奋掩盖不了战略上的懒惰
  3. oracle--pl/sql变量定义----
  4. 图像重建算法_降噪重建技术路在何方?
  5. 当yum 遇到No more mirrors to try
  6. 07-图4 哈利·波特的考试 (25 分)
  7. 2017年php还能火多久,PHP还会火吗?
  8. 分式混合运算20道题_FAG剖分式调心滚子轴承的性能
  9. 太极发送卡片软件_QQxml卡片消息发送-防撤回等等安卓QQ插件Notified-支持太极框架 -发送QQ卡片消息...
  10. c++ CImage类的常用命令
  11. 玩许多计算机游戏的英语,玩电脑游戏英语作文
  12. python数字类型中包含了哪三种类型_Python数字类型中包含了________、________和_________三种类型。...
  13. 维生素C(抗坏血酸)摄入过多有啥后果?
  14. altium designer自动布线设置GND或其他网络不布线的方法
  15. 营销活动思维导图系列(共55份)
  16. 常量(Constant)
  17. 《经济学讲义 上》 李俊慧 读书笔记
  18. 台式电脑win7计算机无法启动,台式机无法开机怎么重装win7系统
  19. linux虚拟主机ping不通域名
  20. Wall的LocationCurve获得的墙基线位置 是否与墙的定位线有关?

热门文章

  1. Netty学习总结(5)——Netty之TCP粘包/拆包问题的解决之道
  2. Maven学习总结(26)——maven update时,报:Preference node org.eclipse.wst.validation...
  3. Git学习总结(12)——多人开发 Git 分支管理详解
  4. nginx linux windows 忽略大小写_React 基础 在 Windows 下使用 React , 你需要注意这些问题...
  5. stm08S单片机C语言编,STM8S单片机入门1(开发环境搭建)
  6. Spring Boot的自动配置的原理
  7. 菜鸟入门【ASP.NET Core】6:配置的热更新、配置的框架设计
  8. 洛谷——P1706 全排列问题
  9. [unity3d]再次修改socket聊天,完美的服务器端
  10. 计算机原理基础-原反补