为什么SKIA不使用自定义FilterInputStream?

时间:2013-02-21 21:49:04

标签: android bitmap inputstream skia

我正在尝试从扩展的FilterInputStream中解码位图。我必须对图像数据执行动态字节操作,以便为SKIA提供可解码图像,但是SKIA似乎忽略了我的自定义InputStream并初始化了它自己的一个......

当我运行我的测试应用程序时,尝试加载2mb大JPEG会导致ObfuscatedInputStream.read([])仅从BitmapFactory.decodeStream()

调用一次

似乎一旦文件类型是从我ObfuscatedInputStream检索到的第一个16kb数据中确定的,它就会初始化自己的原生流并从中读取,从而有效地呈现我对输入流应该如何进行的所有更改工作无用......

这是我扩展的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参数的重点是什么...... / p>

1 个答案:

答案 0 :(得分:0)

结果表明它无法检测到它是从它接收的前1024个字节开始的实际图像。如果它没有检测到文件是实际图像,它将不会打扰其余部分,因此只读取[]召唤一次。