我正在尝试从扩展的 FilterInputStream 解码位图。我必须对图像数据执行动态字节操作,以向 SKIA 提供可解码的图像,但是 SKIA 似乎忽略了我的自定义 InputStream 并初始化了它自己的一个......
当我运行我的测试应用程序时,尝试加载 2mb 大的 JPEG 会导致ObfuscatedInputStream.read([])
仅从BitmapFactory.decodeStream()
似乎一旦从我检索到的前 16kb 数据确定文件类型,ObfuscatedInputStream
它就会初始化自己的本机流并从中读取,有效地渲染我对输入流应该如何工作所做的所有更改无用......
这是我扩展的 FilterInputStream 类中的缓冲读取函数。函数顶部的 Log.d 只执行一次。
@Override
public int read(byte b[], int off, int len) throws IOException
{
Log.d(TAG, "called read[] with aval + " + super.available() + " len " + len);
int numBytesRead = -1;
if (pos == 0)
{
numBytesRead = fill(b);
if (numBytesRead < len)
{
int j;
numBytesRead += ((j = super.read(b, numBytesRead, len - numBytesRead)) == -1) ? 0 : j ;
}
}
else
numBytesRead = super.read(b, 0, len);
if (numBytesRead > -1)
pos += numBytesRead;
Log.d(TAG, "actually read " + numBytesRead);
return numBytesRead;
}
有没有人遇到过这个问题?似乎获得我想要的行为的唯一方法是重写部分 SKIA 库......我真的很想知道 InputStream 参数的意义是什么,如果本机实现初始化它自己的流......