Почему ответ API с двоичными данными изменяет символы - PullRequest
0 голосов
/ 04 февраля 2020

Я в растерянности здесь. У меня есть API, который возвращает двоичные данные. Проблема в том, что при получении двоичных данных они немного отличаются от того, что было отправлено, что приводит к тому, что данные не используются.

Я пробовал в C# и Java. Последний фрагмент кода из Java:

  private NanoHTTPD.Response response() throws IOException
  {

    byte[] data = readFileData(file); //this is a file with binary data, read into a byte array

    return newChunkedResponse(NanoHTTPD.Response.Status.OK, "application/octet-stream", new ByteArrayInputStream(data) );
  }

Клиент ожидает приложение / октет-поток. Я преобразовал в base64 перед отправкой и распечатал, чтобы сравнить с фактическими данными ответа. Сравнение двух показывает различия. Шестнадцатеричный дамп также показывает различия.

Hexdump

00000250 00 02 00 00 00 43 00 6b 0b 09 24 4 c a5 2b 3f af | ..... C. k .. $ L. + ?. |

00000250 00 02 00 00 00 43 00 6b 0b 09 24 4 c a5 2b 81 af | ..... C .k .. $ L. + .. |

90% данных, похоже, совпадают. Я не могу понять, почему некоторые данные меняются. Я пробовал разные кодировки: UTF-8, ANSI.

Любые идеи приветствуются.

Спасибо

Редактировать: я пробовал с и без кодировок, и я все еще получаю данные, отличные от источника.

Я только что попробовал ниже, и та же проблема.

byte[] data= Files.readAllBytes(Paths.get(filename)); return newFixedLengthResponse(NanoHTTPD.Response.Status.OK, "application/octet-stream", new ByteArrayInputStream(data), data.length);

...