Created
October 8, 2016 23:21
-
-
Save TheSalarKhan/a5242147e7bc2d431b2c0a8670e33a0f to your computer and use it in GitHub Desktop.
GZIP Compress/Decompress in C#/JAVA
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
using System; | |
using System.IO; | |
using System.IO.Compression; | |
using System.Text; | |
class Program { | |
private static 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); | |
return Convert.ToBase64String(compressed); | |
} | |
public static string Decompress(string compressedText) | |
{ | |
byte[] gZipBuffer = Convert.FromBase64String(compressedText); | |
using (var memoryStream = new MemoryStream()) | |
{ | |
int dataLength = BitConverter.ToInt32(gZipBuffer, 0); | |
memoryStream.Write(gZipBuffer, 0, gZipBuffer.Length); | |
var buffer = new byte[dataLength]; | |
memoryStream.Position = 0; | |
using (var gZipStream = new GZipStream(memoryStream, CompressionMode.Decompress)) | |
{ | |
gZipStream.Read(buffer, 0, buffer.Length); | |
} | |
return Encoding.UTF8.GetString(buffer); | |
} | |
} | |
public static void Main(string[] args) { | |
string original = "Mary had a little LAMB"; | |
string compressed = Compress(original); | |
string decompressed = Decompress(compressed); | |
Console.WriteLine("Original String: "+original); | |
Console.WriteLine("Compressed String: "+compressed); | |
Console.WriteLine("Decompressed String: "+decompressed); | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import java.io.ByteArrayInputStream; | |
import java.io.ByteArrayOutputStream; | |
import java.io.IOException; | |
import java.util.Base64; | |
import java.util.zip.GZIPInputStream; | |
import java.util.zip.GZIPOutputStream; | |
/** | |
* Created by salar on 10/3/16. | |
*/ | |
public class Program { | |
private static String Compress(String data) { | |
try { | |
// Create an output stream, and a gzip stream to wrap over. | |
ByteArrayOutputStream bos = new ByteArrayOutputStream(data.length()); | |
GZIPOutputStream gzip = new GZIPOutputStream(bos); | |
// Compress the input string | |
gzip.write(data.getBytes()); | |
gzip.close(); | |
byte[] compressed = bos.toByteArray(); | |
bos.close(); | |
// Convert to base64 | |
compressed = Base64.getEncoder().encode(compressed); | |
// return the newly created string | |
return new String(compressed); | |
} catch(IOException e) { | |
return null; | |
} | |
} | |
private static String Decompress(String compressedText) throws IOException { | |
// get the bytes for the compressed string | |
byte[] compressed = compressedText.getBytes("UTF8"); | |
// convert the bytes from base64 to normal string | |
Base64.Decoder d = Base64.getDecoder(); | |
compressed = d.decode(compressed); | |
// decode. | |
final int BUFFER_SIZE = 32; | |
ByteArrayInputStream is = new ByteArrayInputStream(compressed); | |
GZIPInputStream gis = new GZIPInputStream(is, BUFFER_SIZE); | |
StringBuilder string = new StringBuilder(); | |
byte[] data = new byte[BUFFER_SIZE]; | |
int bytesRead; | |
while ((bytesRead = gis.read(data)) != -1) | |
{ | |
string.append(new String(data, 0, bytesRead)); | |
} | |
gis.close(); | |
is.close(); | |
return string.toString(); | |
} | |
public static void main(String args[]) { | |
String input = "Mary had a little LAMB"; | |
String compressed = Compress(input); | |
String uncompressed = null; | |
try { | |
uncompressed = Decompress(compressed); | |
} catch (IOException e) { | |
e.printStackTrace(); | |
} | |
System.out.println("Original String: " + input); | |
System.out.println("Compressed String: "+compressed); | |
System.out.println("Uncompressed String: "+uncompressed); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment