需求: 先从外部读取10张图片。  等全部读取完后 再依次处理 
做法: 1  声明 List<BufferedImage> imageList =new ArrayList<BufferedImage>(); 
      2  循环 依次保存 imageList.add(读到图片)
      3  等图片全部添加到 imageList后 ,进行图片分析处理问题: 1 从imageList.get(i) 时  永远获取的是最后一张图片.  
      2 如果在 (做法 2) 里面进行 imageList.get(i)一切正常.
      
在java中 要怎么实现内存来临时存放图片信息?简单说其实 就是想开辟一个临时内存空间来存放图片. 等图片全部存放好后。 再依次处理.  

解决方案 »

  1.   

    肯定是程序处理逻辑出错,跟图片无关。
    比如,bufferdImage对象应该在循环里面,每次重新new,而不是使用上一个对象,包括其它相关的一些对象,都要在循环中重新new.
      

  2.   

    同意楼上 楼主是不是没有new BufferedImage,只是重复使用同一个BufferedImage,所以list中get出来总是同一个对象
      

  3.   

    imageList.add的时候估计添加的是同一个对象了,虽然对象的内容是每次发生变化了
    即LZ所说的问题,每次获得图片的时候,BufferedImage要重新new一个,不要使用原来的,否则add都是同一个对象
      

  4.   

    List<BufferedImage> images = new ArrayList<BufferedImage>();
    for(...){
        images.add(ImageIO.read(...);
    }for(BufferedImage image:images){
       ...;
    }
      

  5.   


    1.循环保存的时候要重新new,要不你存的是同一个对象。list里所有的值指向同一个内存地址。
    2.在内存中存储集合可以用redis。
      

  6.   

    代码是这样的for(...){
     BufferedImage bufferImage =getImage(); //从第三方设备获取图片 
      imageList.add(bufferImage );
      
    }
    for(BufferedImage  b :  imageList){//在这里读取的图片都是同一张 (最后一张)
    }
      

  7.   

    问题解决了 getImage() , 里用的是全局变量...  作用域改成方法里 就好了。 
    不过 报OutOfmemory了   是不是因为图片太大无法保存在内存中?  但考虑到效率的因素,不想在硬盘中做临时缓存。 java  可以开辟更多内存给程序吗? 比如 1G 
      

  8.   

    启动程序的时候加上参数
    java -Xms 1024M -Xmx 2048M your_class