2017-11-13 21 views
0

私は最初に圧縮された(gzipではない)Stringを持っています。 もう一度プレーンテキストを使いたいです。コードBase64は文字列をデコードして解凍します

private void decode_decompress(String string) { 
    byte[] decodedBytes = Base64.decodeBase64(string.getBytes()); 
    ByteArrayOutputStream stream = new ByteArrayOutputStream(); 
    Inflater decompresser = new Inflater(true); 
    InflaterOutputStream inflaterOutputStream = new InflaterOutputStream(stream, decompresser); 
    try { 
     inflaterOutputStream.write(decodedBytes); 
     inflaterOutputStream.close(); 
     byte[] output2 = stream.toByteArray();   
     logger.info("Data: {}", output2.toString()); 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
} 

次の例外がスローされます。

java.util.zip.ZipException: invalid stored block lengths 
     at java.util.zip.InflaterOutputStream.write(InflaterOutputStream.java:273) 
     at java.io.FilterOutputStream.write(FilterOutputStream.java:97) 
     at de.martinm.tools.EBICS.DSTools.decode_decompress(DSTools.java:87) 
     at de.martinm.tools.EBICS.DSTools.process(DSTools.java:77) 
     at de.martinm.tools.EBICS.DSTools.main(DSTools.java:100) 

私は推測、私はここで

を収縮/入力/出力を膨らま再び混合てることは、圧縮とBase64エンコードされたデータです。

eJx1U2tzqjAQ/SsO96NTw1PBQTr4qlgtyqvVL3cihEehiSYg1l9/rd46dZx + y549Ocme3dUfDx9FY48oywjucUKL5xoIhyTKcNLjfG/8oHINVkIcwY Jg1OMw4R4N3c0SDMuKokW1eUafNo0QHcISNk5qmPW4tCy3XQDqum6hTRayFqEJcHle4C6MbnRLqqUzQ + R5HvAaOHEiliV/vtlnjR5XUdw90S5hd8Lz8jfhwLJf9ATwNp + 5YYo + 4EOGvyoJ0ekWy7rsDM5ICMtz7b/+ uXH/Ljgf/7JvG1oHFnF3tlg4JoZ + OQewqJChR6zruOZNPCdRVVTMMOebJcxHZRJ1kqeDJJqfR6IQJDdngt1cBt5ncYKnO8d99Tp9gYoweT2O40BUatURhWKZvVHV7E8102XHXTDN5ZI1vZyX6KKeSm + SmK9VlQZ5nZeKvd8X7aPUmRztxdp8rtaZom1kJlsRqsK95RSS7RJ7AYOQbg6S2vZXrjWA6S5vqzlWYCG/z947YgXjcOasFuF8/JKs34nngCGYIVBukJd9jLHftuQSmfV6LJFg2CQrU5Ze4qJYpR1/b5qD2MaOvSv27Z1PV4GA + p1U1IDFWLJaifGEKmGKxZ3lq5Ox0EHb1G ++ JvGIpaSayxYd9J2kfO7nhXiw4XYYD3fyJsbC8kmDVv2iJZqqaAtnn/d08MPkL8NHh + 1plHFpmEtzcM5ekXN00yBw075rg4PLxhgmz7d1cAf/gG5GAdISI2oNjVHfGried5K/QrrPfqYUHfwH7sSu62b8A39iR + Yこれは解決

+1

圧縮が間違っている可能性があります。そのコードを表示します。ここでは、 'string.getBytes(StandardCharsets.US_ASCII)'と 'new String(output2、StandardCharsets.UTF_8)'または圧縮時に使用される、クロスプラットフォームの明快さ(コードチェッカー)のために行います。 –

+0

'Base64.decodeBase64(string.getBytes());)の代わりに、内部でISO-8859-1文字セットを使用する' Base64.decodeBase64(string); 'を使うことができます。 'Inflater(boolean)'のJavaDocにも注意してください: '' nowrap 'オプションを使うときは余分な "ダミー"バイトを入力する必要もあります。 " - したがって、 'decodedBytes'にバイトを前置しなければならないかもしれません。しかし、あなたは "gzipではない"と述べたので、おそらくGZIP互換の解凍を無効にし、 'false'を渡すか、引数のないコンストラクタを使用したいと思うでしょう。 – Thomas

+0

圧縮は純粋なzip圧縮でなければなりません。これは、データが標準であることが要求されているので、 –

答えて

1

を=問題:

private void decode_decompress(String string) { 
    byte[] decodedBytes = Base64.decodeBase64(string); 
    ByteArrayOutputStream stream = new ByteArrayOutputStream(); 
    Inflater decompresser = new Inflater(false); 
    InflaterOutputStream inflaterOutputStream = new InflaterOutputStream(stream, decompresser); 
    try { 
     inflaterOutputStream.write(decodedBytes); 
     inflaterOutputStream.close(); 
     String data = stream.toString(); 
     logger.info("Data: {}", data); 
    } catch (IOException e) { 
     logger.error(string, e); 
    } 
} 
関連する問題