У меня есть мобильное приложение, в котором я сжимаю строку JSON с помощью gzip и сохраняю данные в базе данных. У меня также есть веб-приложение, которое распаковывает ту же строку JSON для отображения данных на веб-странице. Проблема в том, что в строке JSON при распаковке в веб-приложении появляются неизвестные символы, которые не видны при распаковке в мобильном приложении.
Приложение Android записано в Java и использует следующий код для сжатия строки:
ByteArrayOutputStream baos = new ByteArrayOutputStream();
GZIPOutputStream gzipOut = null;
try {
gzipOut = new GZIPOutputStream(baos);
ObjectOutputStream objectOut = new ObjectOutputStream(gzipOut);
objectOut.writeObject(jsonData);
objectOut.close();
// Wrapper for the byte array
ServerData nData = new ServerData();
nData.data = baos.toByteArray();
String finalData = JSONObjectStringConverter.json.toJson(nData);
return finalData;
} catch (IOException e) {
e.printStackTrace();
}
Кажется, что приведенное выше работает правильно, сохраняя массив байтов в оболочке, а затем в базе данных.
Веб-приложение использует a nodejs backend и использует следующий код для распаковки данных после того, как они извлечены из базы данных и удалены из оболочки:
try{
// Convert the byte array back to JSON
const decompressedData = zlib.gunzipSync(new Uint8Array(compressedByteArray) );
jsonData = optionDataInflated.toString();
}catch(e){
console.error(e)
}
Опять же, это в основном работает, но есть некоторые неопознанные символы в начало строки:
"��\u0000\u0005t��{\"cloudData\": ..."
Я подумал, что это может иметь какое-то отношение к заголовку сжатой строки (то есть первые 10 байтов в массиве байтов):
[31, -117, 8, 0, 0, 0, 0, 0, 0, 0,...
но я не смог добиться в этом большого прогресса. Есть ли у кого-нибудь другие предложения относительно того, в чем может быть проблема?