如何将字符串转换为 GZIP Base64 字符串?
我一直试图弄清楚使用 's 等,但在理解它们方面没有成功。我想做的就是将一串字符串 - “字符串”转换为GZIP Base64格式。我该怎么做?GZIPOutputStream
通过GZIP Base64格式,我的意思是字符串首先使用GZIP压缩,然后转换为Base64。
我一直试图弄清楚使用 's 等,但在理解它们方面没有成功。我想做的就是将一串字符串 - “字符串”转换为GZIP Base64格式。我该怎么做?GZIPOutputStream
通过GZIP Base64格式,我的意思是字符串首先使用GZIP压缩,然后转换为Base64。
使用Apache Commons Codec Base64OutputStream
。
下面是一个示例类:
import java.util.zip.GZIPOutputStream;
import org.apache.commons.codec.binary.Base64OutputStream;
public class Test {
public static void main(String[] args) {
String text = "a string of characters";
try {
Base64OutputStream b64os = new Base64OutputStream(System.out);
GZIPOutputStream gzip = new GZIPOutputStream(b64os);
gzip.write(text.getBytes("UTF-8"));
gzip.close();
b64os.close();
} catch (Throwable t) {
t.printStackTrace();
}
}
}
哪些输出:
H4sIAAAAAAAAAEtUKC4pysxLV8hPU0jOSCxKTC5JLSoGAOP+cfkWAAAA
在 Linux 下,您可以确认这适用于:
echo 'H4sIAAAAAAAAAEtUKC4pysxLV8hPU0jOSCxKTC5JLSoGAOP+cfkWAAAA' | base64 -d | gunzip
(请注意,在OSX上,您应该使用而不是在上面的命令中)base64 -D
base64 -d
哪些输出:
a string of characters
类 Base64
- 自: 1.8方法全部字节
数 - 起始:1.9类 GZIPInputStream
和 GZIPOutputStream
- 自: 1.1public static void main(String[] args) throws IOException {
byte[] original = "string".getBytes(StandardCharsets.UTF_8);
// encode
byte[] gzipToBase64 = encodeToBase64(encodeToGZIP(original));
System.out.println(new String(gzipToBase64));
//H4sIAAAAAAAAACsuKcrMSwcAqbK+ngYAAAA=
// decode
byte[] fromBase64Gzip = decodeFromGZIP(decodeFromBase64(gzipToBase64));
System.out.println(Arrays.equals(original, fromBase64Gzip)); //true
}
public static byte[] decodeFromBase64(byte[] arr) {
return Base64.getDecoder().decode(arr);
}
public static byte[] encodeToBase64(byte[] arr) {
return Base64.getEncoder().encode(arr);
}
public static byte[] decodeFromGZIP(byte[] arr) throws IOException {
ByteArrayInputStream bais = new ByteArrayInputStream(arr);
GZIPInputStream gzip = new GZIPInputStream(bais);
return gzip.readAllBytes();
}
public static byte[] encodeToGZIP(byte[] arr) throws IOException {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
GZIPOutputStream gzip = new GZIPOutputStream(baos);
gzip.write(arr);
gzip.finish();
return baos.toByteArray();
}