从输入流中读取

时间:2013-06-07 15:41:05

标签: java android bitmap inputstream bitmapfactory

我正在为我的Android应用程序开发一个库,我将附加信息附加到PNG图像的末尾。我正在创建一个 DataOutputStream 变量并在其末尾写入额外的信息,以便在我打开PNG并使用 DataInputStream 将其转换为Bitmap时使用。我添加了一个标记来区分图像代码何时结束,我的额外信息开始。

在标记后正确添加额外数据。问题是 DataInputStream 的PNG数据,将其转换为Bitmap。正在读取所有 DataInputStream (即使我在标记之前添加了大量占位符字节)。

我用来读取流的PNG部分的实现是:

Bitmap image = BitmapFactory.decodeStream(inputStream);

我想知道是否还有其他方法可以实现此操作以停止在PNG数据字节后读取流。

如果没有更好的方法,我将采用的路线是将输入流复制到数组中。然后我会读到所有数据,直到我到达标记。

1 个答案:

答案 0 :(得分:1)

您可以创建一个包装器InputStream,然后在读取整个流之前报告EOF。这样可以避免将整个流读入字节数组。

class MarkerInputStream extends FilterInputStream {
    MarkerInputStream(InputStream in) {
        super(in);
    }

    @Override
    public int read() throws IOException {
        if (isAtMarker()) {
            return -1;
        }
        // may need to read from a cache depending on what isAtMarker method does.
        return super.read();
    }

    private boolean isAtMarker() {
        // logic for determining when you're at the end of the image portion
        return false;
     }
}