我有一些旧代码,直到最近仍在工作,但是现在看来已经讨厌了,因为它可以在使用OpenJDK 6而不是Java SE 6的新服务器上运行.

这个问题似乎与JAI.create有关.我有jpeg文件,可以缩放并转换为png文件.这段代码曾经可以正常工作,但现在已经转移到运行OpenJDK的盒子上,文件描述符似乎永远都不会关闭,而且我看到越来越多的tmp文件堆积在服务器的tmp目录中.这些不是我创建的文件,因此我认为是由JAI完成的.

另一个原因可能是新服务器上的堆大小更大.如果JAI在完成时清理干净,但是GC发生的频率降低了,那么文件可能因此而堆积起来.减小堆大小不是一种选择,并且随着ulimit的增加,我们似乎遇到了不相关的问题.

这是运行此文件时泄漏文件的示例:

/tmp/imageio7201901174018490724.tmp

一些代码:

// Processor is an internal class that aggregates operations

// performed on the image, like resizing

private byte[] processImage(Processor processor, InputStream stream) {

byte[] bytes = null;

SeekableStream s = null;

try {

// Read the file from the stream

s = SeekableStream.wrapInputStream(stream, true);

RenderedImage image = JAI.create("stream", s);

BufferedImage img = PlanarImage.wrapRenderedImage(image).getAsBufferedImage();

// Process image

if (processor != null) {

image = processor.process(img);

}

// Convert to bytes

bytes = convertToPngBytes(image);

} catch (Exception e){

// error handling

} finally {

// Clean up streams

IOUtils.closeQuietly(stream);

IOUtils.closeQuietly(s);

}

return bytes;

}

private static byte[] convertToPngBytes(RenderedImage image) throws IOException {

ByteArrayOutputStream out = null;

byte[] bytes = null;

try {

out = new ByteArrayOutputStream();

ImageIO.write(image, "png", out);

bytes = out.toByteArray();

} finally {

IOUtils.closeQuietly(out);

}

return bytes;

}

我的问题是:

>有人遇到并解决了吗?由于创建的tmp文件不是我的,因此我不知道它们的名称,因此无法对其进行任何操作.

>有哪些用于调整图像大小和格式的库?我听说了Scalr-还有什么我需要研究的?

我现在不愿重提旧代码,但是如果没有其他选择的话…

谢谢!

java jai create 方法_Java-JAI创建似乎使文件描述符保持打开状态相关推荐

  1. java最大文件描述符,java – 为什么JDK NIO使用这么多的anon_inode文件描述符?

    我正在使用Sun的JDK 1.6.0_26和NIO(使用Netty),在lsof中我看到数百个文件描述符是anon_inode: $lsof -np 11225 | fgrep -w anon_ino ...

  2. java jai create 方法_使用JAI扩展Java Image的功能

    Java Image功能一直都在增强,但是向磁盘写一个图像文件或者返回一个PNG或JPEG依然比较难实现.但是我们可以使用Java Advanced Imaging(JAI)API来解决这个问题.JA ...

  3. java jai create 方法,b用JAI扩大Java的图象处理本领/b[Java编程]

    赞助商链接 本文"用JAI扩大Java的图象处理本领[Java编程]"是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判 ...

  4. java套接字创建失败_Linux的文件描述符个数限制导致创建文件(或socket)失败的问题...

    众所周知,在相应进程的/proc/$pid/fd 目录下存放了此进程所有打开的fd.当然有些可能不是本进程自己打开的,如通过fork()从父进程继承而来的.本文着着重讲述socket有关的内容.当我们 ...

  5. C语言socket accept()函数(提取出所监听套接字的等待连接队列中第一个连接请求,创建一个新的套接字,并返回指向该套接字的文件描述符)

    文章目录 名称 使用格式 功能参数描述 参数 sockfd addr addrlen 返回值 示例 man 2 文档中的accept解释 错误处理 名称 accept() 接收一个套接字中已建立的连接 ...

  6. Linux中进程间传递文件描述符的方法

    在进行fork调用后,由于子进程会拷贝父进程的资源,所以父进程中打开的文件描述符在子进程中仍然保持着打开,我们很容易的就将父进程的描述符传递给了子进程.但是除了这种情况下,如果想将某个父进程在子进程创 ...

  7. linux c通过文件描述符以及write和read方法对文件进行读写

    1.write和read方法讲解 #include<unistd.h> ssize_t read(int fd, void *buf,size_t count); fd为文件描述符,buf ...

  8. linux c语言 写文件,linux c通过文件描述符以及write和read方法对文件进行读写

    1.write和read方法讲解 #include ssize_t read(int fd, void *buf,size_t count); fd为文件描述符,buf缓冲区指针,count表示要读取 ...

  9. java 创建文件夹的方法_java中创建文件夹的方法

    java中创建文件夹的方法 发布时间:2020-06-10 11:46:49 来源:亿速云 阅读:461 作者:Leah 这篇文章给大家分享的是java中创建文件夹的方法.小编觉得挺实用的,因此分享给 ...

最新文章

  1. ECharts简单入门demo
  2. python 回调函数(Callback)
  3. 报错“Error running ‘Tomcat 9.0.17‘: Address localhost:1099 is already in use
  4. [转]js实现简单的双向数据绑定
  5. LeetCode(520)——检测大写字母(JavaScript)
  6. Django RESTful规范
  7. 【软件工具使用】IDM安装、设置及常见问题解决方法
  8. Sublime Text 3 全程详细图文使用教程
  9. 微信打飞机--Java版
  10. 关闭远程服务器端口,远程端口 程序自动关闭问题解决方案
  11. expr4j 表达式计算
  12. 王者荣耀上官婉儿的语录
  13. HAproxy增加日志记录功能和自定义日志输出内容、格式
  14. Didn't find class android.support.v7.widget.RecyclerView 解决办法 ———————————————— 版权声明:本文为CSDN博主「eag
  15. C语言的system函数
  16. 冬令营第四天(1.21)
  17. 探秘谷歌地球,它如何绘制全球98%的地图?
  18. 关键点提取:face_recognition、疲劳检测、人脸校准、人脸数据库
  19. 二叉树的度为2的节点和叶子节点的关系
  20. 贵州大学计算机历年收分,贵州大学历年分数线 2021贵州大学录取分数线

热门文章

  1. PLC远程监控有什么方式?如何进行远程上下载?
  2. PHP识别二维码中的图片
  3. 你所需要了解的关于技术团队的要求
  4. Quantum Espresso Hands-On实战训练(三)——DOS计算
  5. 局域网共享技术及网络故障检测排除
  6. Comsol学习笔记1:三种瞬态求解器的选择
  7. 3. web前端开发分享-css,js提高篇
  8. 计算机办公软件应用实训,计算机专业职业教育实训系列教材:Office 2007办公软件实训教程...
  9. 卡耐基-----人性的弱点
  10. 13、《Libevent中文帮助文档》学习笔记13:Linux下集成、运行libevent