java - 如何在 Java 中重用图像并避免大量使用流?
问题描述
我有 5 张图片作为文件,我想在 Vaadin-Grid 的多行中重复使用它们。我注意到我必须按流一次又一次地加载图片才能使其正常工作。以下方式对我不起作用,我无法向我解释。
(Image
来自com.vaadin.flow.component.html.Image;
Vaadin 14)
我像下面这样加载图像。我删除了错误处理以使其更易于阅读。
public static Image loadImage(...) {
File file = new File(filepath);
var bufferedImage = ImageIO.read(file);
ByteArrayOutputStream bout = new ByteArrayOutputStream();
ImageIO.write(bufferedImage, getFileExtension(filepath), bout);
var bytes = bout.toByteArray();
StreamResource resource = new StreamResource(defaultNameImage, () -> new ByteArrayInputStream(bytes));
bout.close();
return new Image(resource, defaultNameImage);
}
网格的每一行都创建如下(简化):
private Entry createEntry(...) {
var image = UtilFile.loadImage(PATH_TO_IMAGE, DEFAULT_NAME);
return new Entry(image);
}
如果我想再次访问图像以在 UI 中显示它,就会出现真正的问题。
grid.addColumn(new ComponentRenderer<Image, Entry>(entry -> {
return entry.getImage(); // Here is the trouble
}
})).setHeader("Image");
每行只显示一个图像,而不是 1 个。这是因为流只能使用一次吗?我会猜到 Image 的新实例将具有该图像。我有点困惑,对不起。
现在具体问题:
为什么我的方法行不通?流是否只使用一次并且 Image 的其他实例没有获取加载的图像?
是否可以避免大量使用流?我想简单地将图像保存在内存中并重用它。
提前致谢!
解决方案
推荐阅读
- log4j - Log4j 没有将日志打印到自由容器上的控制台
- django - 如何在数据库中查询用户位置一定半径内的所有点?
- javascript - 如何将带有ajax请求的php页面添加到wordpress中的另一个php?
- laravel - 语法错误,意外 ',',期待 ']'
- python - FFmpeg 确认后返回“必须指定输出”
- git - 为什么“git pull”有时会要求我提供合并请求评论?
- asp.net - ASP.NET 使用另一个控制器
- javascript - 不透明度过渡css动画从高到低工作,反之则不然
- java - 如何从用 JAVA 编写的 AWS Lambda 中的 Cognito Identity 获取临时凭证
- python - 从维基百科页面获取 url 列表