Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/369.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在com.google.Volley上覆盖图像解析的最佳方法是什么?_Java_Android_Rest_Mobile_Android Volley - Fatal编程技术网

Java 在com.google.Volley上覆盖图像解析的最佳方法是什么?

Java 在com.google.Volley上覆盖图像解析的最佳方法是什么?,java,android,rest,mobile,android-volley,Java,Android,Rest,Mobile,Android Volley,我在mono上使用c#servicestack开发了自己的RESTAPI。除文件下载外,它可以按预期工作。我注意到它在文件的开头附加了一些位。例如,请参见下图: 我向mono bugzilla提交了bug,同时,我想覆盖客户端上的图像响应,以删除第一个附加内容,从而使图像正常工作。我在c#客户机上尝试过,在保存到文件之前编辑收到的流,效果很好 我需要知道如何以及在哪里可以覆盖截击库,以获得干净的图像,而不是具有最佳性能的格式错误的图像 下午4时37分更新: 我相信我需要修改com.android

我在mono上使用c#servicestack开发了自己的RESTAPI。除文件下载外,它可以按预期工作。我注意到它在文件的开头附加了一些位。例如,请参见下图:

我向mono bugzilla提交了bug,同时,我想覆盖客户端上的图像响应,以删除第一个附加内容,从而使图像正常工作。我在c#客户机上尝试过,在保存到文件之前编辑收到的流,效果很好

我需要知道如何以及在哪里可以覆盖截击库,以获得干净的图像,而不是具有最佳性能的格式错误的图像

下午4时37分更新: 我相信我需要修改com.android.volley.toolbox.ImageRequest>>如果它对我有效,我会尝试并发布解决方案

问候,,
Shaheen

我修改了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);
        ....
        ....
        ....
        ....
       ..}
private-Response-doParse(网络响应){
字节[]数据=response.data;
byte[]pattern=fromHexString(“FFD8FFE000”);
int位置=匹配位置(数据、图案);
如果(位置>0)
data=Arrays.copyOfRange(数据、位置、数据、长度位置);
....
....
....
....
..}
以下是我使用的助手方法:

  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;
}
公共静态int匹配位置(字节[]a,字节[]b){
int matchLength=0;
int maxSearch=30>a.length?a.length:30;

对于(int i=0;i我修改了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);
        ....
        ....
        ....
        ....
       ..}
private-Response-doParse(网络响应){
字节[]数据=response.data;
byte[]pattern=fromHexString(“FFD8FFE000”);
int位置=匹配位置(数据、图案);
如果(位置>0)
data=Arrays.copyOfRange(数据、位置、数据、长度位置);
....
....
....
....
..}
以下是我使用的助手方法:

  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;
}
公共静态int匹配位置(字节[]a,字节[]b){
int matchLength=0;
int maxSearch=30>a.length?a.length:30;

对于(int i=0;额外的字节可能是因为响应使用分块编码返回。响应中是否有
传输编码:分块
头?有关更多信息,请参阅和。感谢esker,是的,这是相同的问题。我将尝试xamiran错误解决方案。额外的字节可能是因为响应使用分块enc返回oding.响应中是否有
传输编码:chunked
头?有关更多信息,请参阅和。谢谢esker,是的,这是相同的问题。我将尝试xamiran错误解决方案。