无法使用Java中的CircularByteBuffer从ImageReader读取图像

时间:2013-06-07 12:11:17

标签: java image stream buffer

我有以下代码:

List<PDXObjectImage> list = new ArrayList<PDXObjectImage>(someValues);
CircularByteBuffer cbb = new CircularByteBuffer(CircularByteBuffer.INFINITE_SIZE);

for(int k=0;k<list.size();k++)
{
    list.get(k).write2OutputStream(cbb.getOutputStream());
    ImageInputStream iis = ImageIO.createImageInputStream(cbb.getInputStream());
    Iterator iter = ImageIO.getImageReaders(iis);
    if (iter.hasNext()) {
        ImageReader reader = (ImageReader) iter.next();
        reader.addIIOReadProgressListener(new IIOReadProgressListener(){...});
        reader.setInput(iis, true, true);

        System.out.println("Still okay");
        BufferedImage img = reader.read(0, null);
        System.out.println("Not okay");

        ImageIcon imageIcon = new ImageIcon(img);
        model.addRow(new Object[]{imageIcon});
    }
}

程序始终显示“仍然可以”,但从不“不行”。

IIOReadProgressListener表示读者在阻止之前会读取最多82.4%的图像。

在我开始使用CircularByteBuffer之前,我使用的是ByteArrayOutputStreamByteArrayInputStreamOutputStreamInputStream的系列,但我不得不改变因为OutOfMemoryError : Java Heap Space

如果有人知道发生了什么,我真的很感激一些帮助,

谢谢

编辑:

使用以下代码也会发生同样的事情:

List<PDXObjectImage> list = new ArrayList<PDXObjectImage>(someValues);

for(int k=0;k<list.size();k++)
{
    PipedOutputStream convertPipe = new PipedOutputStream();
    PipedInputStream dataPipe = new PipedInputStream(convertPipe,1000000);
    img.write2OutputStream(convertPipe);
    ImageInputStream iis = ImageIO.createImageInputStream(dataPipe);
    Iterator iter = ImageIO.getImageReaders(iis);
    if (iter.hasNext()) {
        ImageReader reader = (ImageReader) iter.next();
        reader.addIIOReadProgressListener(new IIOReadProgressListener(){...});
        reader.setInput(iis, true, true);

        System.out.println("Still okay");
        BufferedImage img = reader.read(0, null);
        System.out.println("Not okay");

        ImageIcon imageIcon = new ImageIcon(img);
        model.addRow(new Object[]{imageIcon});
    }
}

0 个答案:

没有答案