java jai create 方法_Java-JAI创建似乎使文件描述符保持打开状态
我有一些旧代码,直到最近仍在工作,但是现在看来已经讨厌了,因为它可以在使用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创建似乎使文件描述符保持打开状态相关推荐
- java最大文件描述符,java – 为什么JDK NIO使用这么多的anon_inode文件描述符?
我正在使用Sun的JDK 1.6.0_26和NIO(使用Netty),在lsof中我看到数百个文件描述符是anon_inode: $lsof -np 11225 | fgrep -w anon_ino ...
- java jai create 方法_使用JAI扩展Java Image的功能
Java Image功能一直都在增强,但是向磁盘写一个图像文件或者返回一个PNG或JPEG依然比较难实现.但是我们可以使用Java Advanced Imaging(JAI)API来解决这个问题.JA ...
- java jai create 方法,b用JAI扩大Java的图象处理本领/b[Java编程]
赞助商链接 本文"用JAI扩大Java的图象处理本领[Java编程]"是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判 ...
- java套接字创建失败_Linux的文件描述符个数限制导致创建文件(或socket)失败的问题...
众所周知,在相应进程的/proc/$pid/fd 目录下存放了此进程所有打开的fd.当然有些可能不是本进程自己打开的,如通过fork()从父进程继承而来的.本文着着重讲述socket有关的内容.当我们 ...
- C语言socket accept()函数(提取出所监听套接字的等待连接队列中第一个连接请求,创建一个新的套接字,并返回指向该套接字的文件描述符)
文章目录 名称 使用格式 功能参数描述 参数 sockfd addr addrlen 返回值 示例 man 2 文档中的accept解释 错误处理 名称 accept() 接收一个套接字中已建立的连接 ...
- Linux中进程间传递文件描述符的方法
在进行fork调用后,由于子进程会拷贝父进程的资源,所以父进程中打开的文件描述符在子进程中仍然保持着打开,我们很容易的就将父进程的描述符传递给了子进程.但是除了这种情况下,如果想将某个父进程在子进程创 ...
- linux c通过文件描述符以及write和read方法对文件进行读写
1.write和read方法讲解 #include<unistd.h> ssize_t read(int fd, void *buf,size_t count); fd为文件描述符,buf ...
- linux c语言 写文件,linux c通过文件描述符以及write和read方法对文件进行读写
1.write和read方法讲解 #include ssize_t read(int fd, void *buf,size_t count); fd为文件描述符,buf缓冲区指针,count表示要读取 ...
- java 创建文件夹的方法_java中创建文件夹的方法
java中创建文件夹的方法 发布时间:2020-06-10 11:46:49 来源:亿速云 阅读:461 作者:Leah 这篇文章给大家分享的是java中创建文件夹的方法.小编觉得挺实用的,因此分享给 ...
最新文章
- ECharts简单入门demo
- python 回调函数(Callback)
- 报错“Error running ‘Tomcat 9.0.17‘: Address localhost:1099 is already in use
- [转]js实现简单的双向数据绑定
- LeetCode(520)——检测大写字母(JavaScript)
- Django RESTful规范
- 【软件工具使用】IDM安装、设置及常见问题解决方法
- Sublime Text 3 全程详细图文使用教程
- 微信打飞机--Java版
- 关闭远程服务器端口,远程端口 程序自动关闭问题解决方案
- expr4j 表达式计算
- 王者荣耀上官婉儿的语录
- HAproxy增加日志记录功能和自定义日志输出内容、格式
- Didn't find class android.support.v7.widget.RecyclerView 解决办法 ———————————————— 版权声明:本文为CSDN博主「eag
- C语言的system函数
- 冬令营第四天(1.21)
- 探秘谷歌地球,它如何绘制全球98%的地图?
- 关键点提取:face_recognition、疲劳检测、人脸校准、人脸数据库
- 二叉树的度为2的节点和叶子节点的关系
- 贵州大学计算机历年收分,贵州大学历年分数线 2021贵州大学录取分数线
热门文章
- PLC远程监控有什么方式?如何进行远程上下载?
- PHP识别二维码中的图片
- 你所需要了解的关于技术团队的要求
- Quantum Espresso Hands-On实战训练(三)——DOS计算
- 局域网共享技术及网络故障检测排除
- Comsol学习笔记1:三种瞬态求解器的选择
- 3. web前端开发分享-css,js提高篇
- 计算机办公软件应用实训,计算机专业职业教育实训系列教材:Office 2007办公软件实训教程...
- 卡耐基-----人性的弱点
- 13、《Libevent中文帮助文档》学习笔记13:Linux下集成、运行libevent