Muthu kader Muthu kader - 1 year ago 145
C# Question

Decompress string in java from compressed string in C#

I was searching for the correct solution to decompress the string in java coming from c# code.I tried myself with lot of techniques in java like(gzip,inflatter etc.).but didn't get the solution.i got some error while trying to decompress the string in java from compressed string from c# code.

My C# code to compress the string is,

public static string CompressString(string text)

byte[] byteArray = Encoding.GetEncoding(1252).GetBytes(text);// Encoding.ASCII.GetBytes(text);

using (var ms = new MemoryStream())
// Compress the text
using (var ds = new DeflateStream(ms, CompressionMode.Compress))
ds.Write(byteArray, 0, byteArray.Length);

return Convert.ToBase64String(ms.ToArray());

And decompress the string in java using,

private static void compressAndDecompress(){
try {
// Encode a String into bytes
String string = "xxxxxxSAMPLECOMPRESSEDSTRINGxxxxxxxxxx";
// // Compress the bytes
byte[] decoded = Base64.decodeBase64(string.getBytes());
byte[] output = new byte[4096];
// Decompress the bytes
Inflater decompresser = new Inflater();

int resultLength = decompresser.inflate(output);

// Decode the bytes into a String
String outputString = new String(output, 0, resultLength, "UTF-8");

} catch( ex) {
} catch ( ex) {

I get this exception when running the above code: incorrect header check

Kindly give me the sample code in java to decompress the string java.Thanks

dbw dbw
Answer Source

My C# code to compress is

 private string Compress(string text)
        byte[] buffer = Encoding.UTF8.GetBytes(text);
        MemoryStream ms = new MemoryStream();
        using (GZipStream zip = new GZipStream(ms, CompressionMode.Compress, true))
            zip.Write(buffer, 0, buffer.Length);

        ms.Position = 0;
        MemoryStream outStream = new MemoryStream();

        byte[] compressed = new byte[ms.Length];
        ms.Read(compressed, 0, compressed.Length);

        byte[] gzBuffer = new byte[compressed.Length + 4];
        System.Buffer.BlockCopy(compressed, 0, gzBuffer, 4, compressed.Length);
        System.Buffer.BlockCopy(BitConverter.GetBytes(buffer.Length), 0, gzBuffer, 0, 4);
        return Convert.ToBase64String(gzBuffer);

Java code to decompress the text is

private String Decompress(String compressedText)

    byte[] compressed = compressedText.getBytes("UTF8");
    compressed = org.apache.commons.codec.binary.Base64.decodeBase64(compressed);
    byte[] buffer=new byte[compressed.length-4];
    buffer = copyForDecompression(compressed,buffer, 4, 0);
    final int BUFFER_SIZE = 32;
    ByteArrayInputStream is = new ByteArrayInputStream(buffer);
    GZIPInputStream gis = new GZIPInputStream(is, BUFFER_SIZE);
    StringBuilder string = new StringBuilder();
    byte[] data = new byte[BUFFER_SIZE];
    int bytesRead;
    while ((bytesRead = != -1) 
        string.append(new String(data, 0, bytesRead));
    return string.toString();
private  byte[] copyForDecompression(byte[] b1,byte[] b2,int srcoffset,int dstoffset)
    for(int i=0;i<b2.length && i<b1.length;i++)
    return b2;

This code works perfectly fine for me.

Recommended from our users: Dynamic Network Monitoring from WhatsUp Gold from IPSwitch. Free Download