Я пытаюсь декодировать строку, которую я получаю. Он сжимается с помощью дефлатера здесь: https://github.com/dankogai/js-deflate И затем base64 закодирован.Декомпрессия строки с использованием Java.util.zip.Inflater
Однако, когда я использую java inflater, я получаю следующее сообщение об ошибке: неизвестный метод сжатия.
import sun.misc.BASE64Decoder;
public void org() throws Exception{
BASE64Decoder decoder = new BASE64Decoder();
try {
String inputString = "84VWAVDY";
byte[] decodedByteArray = decoder.decodeBuffer(inputString);
// Decompress the bytes
Inflater decompresser = new Inflater();
decompresser.setInput(decodedByteArray);
byte[] result = new byte[100];
int resultLength = decompresser.inflate(result);
decompresser.end();
// Decode the bytes into a String
String outputString = new String(result, 0, resultLength);
System.out.println("OUTPUT:" + outputString);
} catch (Exception e){
System.out.println("Exception: " + e);
}
}
Этот код является, в основном, копированием/вставкой из Java API. Я также попытался использовать новый Inflater (true); I.e the nowrap
«Примечание: при использовании опции« nowrap »также необходимо предоставить дополнительный« фиктивный »байт в качестве входных данных. Это требуется родной библиотеке ZLIB для поддержки определенных оптимизаций».
Итак, где же этот фиктивный байт должен быть добавлен? В начале или конце «byte [] decodedByteArray»?
Итак, любые идеи, как решить эту проблему? Нужно ли добавлять только фиктивный байт, нужно ли использовать другие методы и т. Д.?
Ну, вот и все, я думаю, вся помощь приветствуется!
Привет
Джон
Итак, чтобы добавить байт, мне просто нужно сделать еще один байт [], который больше, чем данные, которые я хочу добавить в 0. Затем просто скопируйте байт из исходного массива в новый, а в последней ячейке добавьте 0? – John
Да. Хотя обычно исходный буфер, в который считываются данные, делается как минимум на один байт дольше, поэтому вам не нужно будет делать копию. –
Ahh ok, спасибо! – John