C#和java通过Gzip压缩后变为Base64,互相解压
在C#和Java中,使用Gzip进行压缩并转换为Base64编码,然后互相解压是一个常见的操作。下面是详细的步骤和代码示例,演示如何在C#和Java中进行这些操作。
C#代码示例
压缩并转换为Base64
csharpusing 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
javaimport 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();
}
}
详细步骤
在C#中:
- 使用
GZipStream
对字符串进行压缩。 - 将压缩后的字节数组转换为Base64字符串。
- 通过Base64解码获得压缩后的字节数组。
- 使用
GZipStream
解压字节数组,并转换为原始字符串。
- 使用
在Java中:
- 使用
GZIPOutputStream
对字符串进行压缩。 - 将压缩后的字节数组转换为Base64字符串。
- 通过Base64解码获得压缩后的字节数组。
- 使用
GZIPInputStream
解压字节数组,并转换为原始字符串。
- 使用
关键点
- 确保字符串的字符编码一致(通常使用UTF-8)。
- 在压缩和解压缩过程中正确处理字节流和字符流。
- Base64编码和解码确保数据传输的一致性。
通过以上步骤和代码示例,你可以在C#和Java之间互相压缩和解压字符串数据。如果在过程中遇到任何问题,可以随时向我提问。