Несовместимый вывод функций zip между методами Python и Java - PullRequest
1 голос
/ 13 февраля 2020


Я интегрирую свою систему с внешней.
Моя система записывается в Java, когда внешний записывается в Python.
Эта система требует сжать тело запроса перед отправкой .
Ниже приведены функции, используемые для сжатия:

def decompress(input_bytes):
    bytes = input_bytes.encode('utf-8')
    deflate_byte = base64.decodebytes(bytes)
    output = zlib.decompress(deflate_byte)
    out_str = output.decode('utf-8')
    return out_str

def compress(input_str):
    input_bytes = input_str.encode('utf-8')
    compress = zlib.compress(input_bytes)
    output_bytes = base64.encodebytes(compress)
    out_str = output_bytes.decode('utf-8')
    return out_str

Я разработал код для сжатия / распаковки в Java:

 public byte[] compress(String str) {
    byte[] data = str.getBytes(UTF_8);
    Deflater deflater = new Deflater();
    deflater.setInput(data);
    ByteArrayOutputStream outputStream = new ByteArrayOutputStream(data.length);
    deflater.finish();
    byte[] buffer = new byte[1024];
    while (!deflater.finished()) {
        int count = deflater.deflate(buffer); // returns the generated code... index
        outputStream.write(buffer, 0, count);
    }
    try {
        outputStream.close();
    } catch (IOException e) {
        throw new RuntimeException(e);
    }
    byte[] output = outputStream.toByteArray();
    return Base64.decodeBase64(output);
}

@Override
public String decompress(byte[] data) {
    Inflater inflater = new Inflater();
    inflater.setInput(data);
    ByteArrayOutputStream outputStream = new ByteArrayOutputStream(data.length);
    byte[] buffer = new byte[1024];
    while (!inflater.finished()) {
        int count = 0;
        try {
            count = inflater.inflate(buffer);
        } catch (DataFormatException e) {
            throw new RuntimeException(e);
        }
        outputStream.write(buffer, 0, count);
    }
    try {
        outputStream.close();
    } catch (IOException e) {
        throw new RuntimeException(e);
    }
    byte[] output = outputStream.toByteArray();
    return new String(output);
}

Но вывод сжатия методы несовместимы:
Ввод:

test

Вывод сжатия реализован в Python:

eJwrSS0uAQAEXQHB

Вывод сжатия, реализованного в Java:

��>

Буду признателен за объяснение этой разницы и помогу получить в Java решении, эквивалентном этим Python методов.
Заранее спасибо.

...