Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/371.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用ByteArrayOutputStream将字符串转换为GZIP Base64字符串?_Java_Byte_Gzipoutputstream - Fatal编程技术网

Java 如何使用ByteArrayOutputStream将字符串转换为GZIP Base64字符串?

Java 如何使用ByteArrayOutputStream将字符串转换为GZIP Base64字符串?,java,byte,gzipoutputstream,Java,Byte,Gzipoutputstream,我需要将字符串转换为gzip base64。我有这个密码 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"; t

我需要将字符串转换为gzip base64。我有这个密码

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 {
            ByteArrayOutputStream os = new ByteArrayOutputStream();
            Base64OutputStream b64os = new Base64OutputStream(os);
            GZIPOutputStream gzip = new GZIPOutputStream(b64os);
            gzip.write(text.getBytes("UTF-8"));
            String base64 = new String(os.toByteArray(),"UTF-8");
            gzip.close();
            b64os.close();
            System.out.print(base64)
        } catch (Throwable t) {
            t.printStackTrace();
        }
    }
}
我需要获取
h4siaaaaetukc4pysxlv8hpu0joscxktc5jlsogaop+cfkWAAAA
。为什么我得到这个输出

H4sIAAAAAAAA

在关闭
gzip
b64os
之前,您正在调用
os.toByteArray()
——这意味着它们几乎肯定有缓冲数据。(除此之外,base64流必须等到关闭后才能写出任何填充。)


只要将
base64
的声明/赋值移动到
close
调用之后,我怀疑会没事。

您在关闭
gzip
b64os
之前调用的是
os.toByteArray()。(除此之外,base64流必须等到关闭后才能写出任何填充。)

只要将
base64
的声明/赋值移动到
close
调用之后,我想这样就可以了