- 在 Java/Grails 中将图像从文件读取到 BufferedImage 的最快方法是什么?
- 用 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/