1

我在单声道上使用 c# servicestack 开发了我自己的 rest api。它按预期工作,但文件下载除外。我注意到它在文件开头附加了一些位。例如看下图:下载图像的这个六边形表示

我向 mono bugzilla 提交了错误,同时,我想覆盖客户端上的图像响应以删除第一个附加的东西以使图像工作。我通过在将接收到的流保存到文件之前在 C# 客户端上进行了尝试,它工作正常。

我需要知道如何以及在哪里可以覆盖 volley 库以获得具有最佳性能的干净图像而不是畸形图像。

更新 04:37 PM:我相信我需要修改 com.android.volley.toolbox.ImageRequest >> 如果它适用于我,我会尝试并发布解决方案。

问候, 沙欣

4

1 回答 1

1

我修改了 com.android.volley.toolbox.ImageRequest 中的方法 doParse

private Response<Bitmap> doParse(NetworkResponse response){

        byte[] data = response.data;
        byte [] pattern = fromHexString("FFD8FFE000");
        int position = matchPosition(data,pattern);
        if(position>0)
            data = Arrays.copyOfRange(data, position, data.length-position);
        ....
        ....
        ....
        ....
       ..}

这是我使用的辅助方法:

  public static int matchPosition(byte [] a, byte [] b){
      int matchLength=0;
      int maxSearch = 30>a.length?a.length:30;
    for (int i =0;i<maxSearch;i++) {
      if (a[i]==b[0] && i+b.length<a.length){
          for(int j = 0;j< b.length;j++ )
          {
              if((i+j)==a.length-1)
                  return -1;
              if(a[i+j]==b[j])
                  matchLength++;
          }
          if(matchLength == b.length)
              return i;
          else
              matchLength = 0; 
      }
    }
    return -1; 
  }


private static byte[] fromHexString(final String encoded) {
    if ((encoded.length() % 2) != 0)
        throw new IllegalArgumentException("Input string must contain an even number of characters");

    final byte result[] = new byte[encoded.length()/2];
    final char enc[] = encoded.toCharArray();
    for (int i = 0; i < enc.length; i += 2) {
        StringBuilder curr = new StringBuilder(2);
        curr.append(enc[i]).append(enc[i + 1]);
        result[i/2] = (byte) Integer.parseInt(curr.toString(), 16);
    }
    return result;
}

并且这项工作解决了上面解释的问题!

于 2013-11-10T18:18:00.910 回答