Java 如何在Python中膨胀相同的数据

Java 如何在Python中膨胀相同的数据,java,python,zlib,Java,Python,Zlib,我有一个用Java编写的代码,可以很好地工作,我需要用python扩展相同的数据 import org.apache.commons.codec.binary.Base64; import org.apache.commons.codec.binary.StringUtils; public static byte[] Inflate(byte[] compressedContent) throws IOException { ByteArrayOutputStream

我有一个用Java编写的代码,可以很好地工作,我需要用python扩展相同的数据

import org.apache.commons.codec.binary.Base64;
import org.apache.commons.codec.binary.StringUtils;

    public static byte[] Inflate(byte[] compressedContent) throws IOException {
        ByteArrayOutputStream s = new ByteArrayOutputStream();
        InflaterInputStream iis = new InflaterInputStream(new ByteArrayInputStream(compressedContent), new Inflater(true));
        byte[] buffer = new byte[4096];

        int len;
        while ((len = iis.read(buffer)) != -1) {
            s.write(buffer, 0, len);
        }

        iis.close();
        s.flush();
        s.close();
        return s.toByteArray();
    }
使用

StringUtils.newStringUtf8(inflate(Base64.decodeBase64("PZLHrptQAET_xevHE8VgnB1gyqVjig0bRLkUg-k9yr_HiZTsZo5mZjU_T1GSwHEMp7aCzenH6fR1-ivDae_gx7MwGuDwoWX6PwN3uYjFpDRK2XZRfnJQQXA5MIK3N_s7oEDFb9qruFmVNtmCtuuOX6qcTEVP5k-Hv7t-mVnfo-XgDa4LBkIt9lMmtKBz4kful_eDNBUONYQ95CXHBRY3dSlEYcC063oXC8hMkKLXRof6Re3vS8U1w-A0oRQt0spqnGifob-1orDhK-bMYflYVOR8KQC_YxVjjekaHuUxvQOZXBgdI4ubvl6z-p0BF-AjY2qNca48qY6j80Wa6Wxjvl8c31AG5V6vto8FG3vZ2c1jvt28MuvIdyjTx1otQPLMC71iOHjqtpFihNLmQVhPdSzbuM8rJ_eocJ4z12DzvFDZGwyeC109TGV2xjsQ32kv5VGB2NH1XFiGVd8xkE9PRI1oDHFwRck_25y3KlxMWKmlDrw7Br75nrunSsrNJbZwzq5rTRivAuhmBZz12RRacuxyeSz5ZIcMqFk8Il8U7nYEsLHHqLRP92oEGfvQZgfqLuuNWf-qlXqc56TiLpdjlfvAU-LwGG599wrdKST41sHeiKCbCZckNLW-aT8V0_tC7FzPh1pZWO6uykgGHtpOp0J9KzxKlPdXvwy9FTV0geUAmjERfR_mgwDciiqlr0qahOlKSMrW524DzAY4Fv8-18x1_XWCW1d-aFh-CE2dUfTXbw")))
Java代码运行良好,但我无法将其转换为Python,如下所示

def Base64UrlDecode(data):
    """Decode base64, padding being optional.

    :param data: Base64 data as an ASCII byte string
    :returns: The decoded byte string.

    """
    if isinstance(data, unicode):
        data = data.encode('utf-8')
    missing_padding = len(data) % 4
    if missing_padding != 0:
        data += b'=' * (4 - missing_padding)
    return base64.decodestring(data)

url_decode = Base64UrlDecode(token) # The token is the same string as the above one.
# https://docs.python.org/2/library/zlib.html#zlib.compressobj
for i in range(-15, 32): # try all possible ones, but none works.
    try:
        decode = zlib.decompress(url_decode, i)
    except:
        pass

Java中
充气器(true)
中的
true
表示在没有头部或尾部的情况下对原始放气数据进行充气。要在Python中获得相同的操作,zlib.decompress()的第二个参数必须是
-15
。所以你不需要尝试不同的值

接下来要检查的是Base64解码。这两种情况下的结果肯定不同,因此请查看它们的不同之处,以找到您的bug