需求: 先从外部读取10张图片。 等全部读取完后 再依次处理
做法: 1 声明 List<BufferedImage> imageList =new ArrayList<BufferedImage>();
2 循环 依次保存 imageList.add(读到图片)
3 等图片全部添加到 imageList后 ,进行图片分析处理问题: 1 从imageList.get(i) 时 永远获取的是最后一张图片.
2 如果在 (做法 2) 里面进行 imageList.get(i)一切正常.
在java中 要怎么实现内存来临时存放图片信息?简单说其实 就是想开辟一个临时内存空间来存放图片. 等图片全部存放好后。 再依次处理.
做法: 1 声明 List<BufferedImage> imageList =new ArrayList<BufferedImage>();
2 循环 依次保存 imageList.add(读到图片)
3 等图片全部添加到 imageList后 ,进行图片分析处理问题: 1 从imageList.get(i) 时 永远获取的是最后一张图片.
2 如果在 (做法 2) 里面进行 imageList.get(i)一切正常.
在java中 要怎么实现内存来临时存放图片信息?简单说其实 就是想开辟一个临时内存空间来存放图片. 等图片全部存放好后。 再依次处理.
比如,bufferdImage对象应该在循环里面,每次重新new,而不是使用上一个对象,包括其它相关的一些对象,都要在循环中重新new.
即LZ所说的问题,每次获得图片的时候,BufferedImage要重新new一个,不要使用原来的,否则add都是同一个对象
for(...){
images.add(ImageIO.read(...);
}for(BufferedImage image:images){
...;
}
1.循环保存的时候要重新new,要不你存的是同一个对象。list里所有的值指向同一个内存地址。
2.在内存中存储集合可以用redis。
BufferedImage bufferImage =getImage(); //从第三方设备获取图片
imageList.add(bufferImage );
}
for(BufferedImage b : imageList){//在这里读取的图片都是同一张 (最后一张)
}
不过 报OutOfmemory了 是不是因为图片太大无法保存在内存中? 但考虑到效率的因素,不想在硬盘中做临时缓存。 java 可以开辟更多内存给程序吗? 比如 1G
java -Xms 1024M -Xmx 2048M your_class