C#和java通过Gzip压缩后变为Base64,互相解压

在C#和Java中,使用Gzip进行压缩并转换为Base64编码,然后互相解压是一个常见的操作。下面是详细的步骤和代码示例,演示如何在C#和Java中进行这些操作。

C#代码示例

压缩并转换为Base64

csharp
using System; using System.IO; using System.IO.Compression; using System.Text; public class Program { public static void Main() { string originalString = "This is a test string to be compressed and converted to Base64."; string compressedBase64 = CompressAndBase64Encode(originalString); Console.WriteLine("Compressed and Base64 Encoded: " + compressedBase64); string decompressedString = DecompressBase64(compressedBase64); Console.WriteLine("Decompressed: " + decompressedString); } public static string CompressAndBase64Encode(string str) { byte[] bytes = Encoding.UTF8.GetBytes(str); using (MemoryStream msi = new MemoryStream(bytes)) using (MemoryStream mso = new MemoryStream()) { using (GZipStream gs = new GZipStream(mso, CompressionMode.Compress)) { msi.CopyTo(gs); } return Convert.ToBase64String(mso.ToArray()); } } public static string DecompressBase64(string base64Str) { byte[] bytes = Convert.FromBase64String(base64Str); using (MemoryStream msi = new MemoryStream(bytes)) using (MemoryStream mso = new MemoryStream()) { using (GZipStream gs = new GZipStream(msi, CompressionMode.Decompress)) { gs.CopyTo(mso); } return Encoding.UTF8.GetString(mso.ToArray()); } } }

Java代码示例

压缩并转换为Base64

java
import java.io.*; import java.util.Base64; import java.util.zip.GZIPOutputStream; import java.util.zip.GZIPInputStream; public class Main { public static void main(String[] args) throws IOException { String originalString = "This is a test string to be compressed and converted to Base64."; String compressedBase64 = compressAndBase64Encode(originalString); System.out.println("Compressed and Base64 Encoded: " + compressedBase64); String decompressedString = decompressBase64(compressedBase64); System.out.println("Decompressed: " + decompressedString); } public static String compressAndBase64Encode(String str) throws IOException { ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); GZIPOutputStream gzipOutputStream = new GZIPOutputStream(byteArrayOutputStream); gzipOutputStream.write(str.getBytes("UTF-8")); gzipOutputStream.close(); return Base64.getEncoder().encodeToString(byteArrayOutputStream.toByteArray()); } public static String decompressBase64(String base64Str) throws IOException { byte[] compressed = Base64.getDecoder().decode(base64Str); ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(compressed); GZIPInputStream gzipInputStream = new GZIPInputStream(byteArrayInputStream); BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(gzipInputStream, "UTF-8")); StringBuilder outStr = new StringBuilder(); String line; while ((line = bufferedReader.readLine()) != null) { outStr.append(line); } return outStr.toString(); } }

详细步骤

  1. 在C#中

    • 使用GZipStream对字符串进行压缩。
    • 将压缩后的字节数组转换为Base64字符串。
    • 通过Base64解码获得压缩后的字节数组。
    • 使用GZipStream解压字节数组,并转换为原始字符串。
  2. 在Java中

    • 使用GZIPOutputStream对字符串进行压缩。
    • 将压缩后的字节数组转换为Base64字符串。
    • 通过Base64解码获得压缩后的字节数组。
    • 使用GZIPInputStream解压字节数组,并转换为原始字符串。

关键点

  • 确保字符串的字符编码一致(通常使用UTF-8)。
  • 在压缩和解压缩过程中正确处理字节流和字符流。
  • Base64编码和解码确保数据传输的一致性。

通过以上步骤和代码示例,你可以在C#和Java之间互相压缩和解压字符串数据。如果在过程中遇到任何问题,可以随时向我提问。