我正在为我的Android应用程序开发一个库,我将附加信息附加到PNG图像的末尾。我正在创建一个 DataOutputStream 变量并在其末尾写入额外的信息,以便在我打开PNG并使用 DataInputStream 将其转换为Bitmap时使用。我添加了一个标记来区分图像代码何时结束,我的额外信息开始。
在标记后正确添加额外数据。问题是仅 DataInputStream 的PNG数据,将其转换为Bitmap。正在读取所有 DataInputStream (即使我在标记之前添加了大量占位符字节)。
我用来读取流的PNG部分的实现是:
Bitmap image = BitmapFactory.decodeStream(inputStream);
我想知道是否还有其他方法可以实现此操作以停止在PNG数据字节后读取流。
如果没有更好的方法,我将采用的路线是将输入流复制到数组中。然后我会读到所有数据,直到我到达标记。
答案 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;
}
}