java - 从文件读取/写入图像到 BufferedImage 的最快方法?

标签 java grails grails-2.0 javax.imageio

  1. 在 Java/Grails 中将图像从文件读取到 BufferedImage 的最快方法是什么?
  2. 用 Java/Grails 将图像从 BufferedImage 写入文件的最快方法是什么?

我的变体(阅读):

byte [] imageByteArray = new File(basePath+imageSource).readBytes()
InputStream inStream = new ByteArrayInputStream(imageByteArray)
BufferedImage bufferedImage = ImageIO.read(inStream)

我的变体(写):

BufferedImage bufferedImage = // some image
def fullPath = // image page + file name
byte [] currentImage

try{

    ByteArrayOutputStream baos = new ByteArrayOutputStream();
    ImageIO.write( bufferedImage, "jpg", baos );
    baos.flush();
    currentImage = baos.toByteArray();
    baos.close();

    }catch(IOException e){
        System.out.println(e.getMessage());
    }       
   }    


def newFile = new FileOutputStream(fullPath)
newFile.write(currentImage)
newFile.close()

最佳答案

您的读取解决方案基本上是读取字节两次,一次从文件中读取,一次从 ByteArrayInputStream 中读取。不要那样做

用Java 7阅读

BufferedImage bufferedImage = ImageIO.read(Files.newInputStream(Paths.get(basePath + imageSource)));

用Java 7来写

ImageIO.write(bufferedImage, "jpg", Files.newOutputStream(Paths.get(fullPath)));

调用 Files.newInputStream 将返回一个 ChannelInputStream,据我所知,它没有被缓冲。你会想把它包起来

new BufferedInputStream(Files.newInputStream(...));

这样就可以减少对磁盘的 IO 调用,具体取决于您的使用方式。

关于java - 从文件读取/写入图像到 BufferedImage 的最快方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18522398/

相关文章:

java - 如果列表中的最后一个元素比其他元素大,如何删除它?

java - 拦截Java字段和方法访问,创建代理对象

java - 访问返回到其 API 的对象上的实现特定方法

渲染具有多对多关系的复杂表单时 hibernate 未保存的 transient 错误

maven - EAR 的 Grails Maven 包装

java - 我如何在 Slick2D/LWJGL 或一般游戏编程中使用 "delta"?

spring - 为什么 Spring 允许在封闭的应用程序上下文中发布事件?

grails - 启用级联保存和事务的Grails域关联

Grails 单元测试 : Accessing defined beans via grailsApplication

grails - 在PeriodSelector AMChart中发送Ajax请求