gpt4 book ai didi

java - 如何使用 org.apache.commons.codec.binary.base64 对 Java 对象进行 Base64 编码?

转载 作者:搜寻专家 更新时间:2023-10-30 19:53:15 26 4
gpt4 key购买 nike

我一直在尝试进行对象序列化并对结果进行 Base64 编码。它适用于 Sun 的库:

Bean01 bean01 = new Bean01();
bean01.setDefaultValues();
ByteArrayOutputStream baos = new ByteArrayOutputStream();
new ObjectOutputStream( baos ).writeObject( bean01 );
System.out.println(Base64.encode(baos.toByteArray()));

这很好用。但是,我想使用 org.apache.commons.codec.binary.base64 做同样的事情,但这不会返回相同的字符串:

System.out.println(org.apache.commons.codec.binary.Base64.encodeBase64(baos.toByteArray()));

使用 Apache 的编码器实现 byteArray 的正确 Base64 编码的正确方法是什么?

最佳答案

实际上,commons-codec 版本和您使用的特定 Sun 内部版本确实 给出了相同的结果。我认为您认为他们提供了不同的版本,因为您在执行以下操作时隐式调用数组上的 toString():

System.out.println(org.apache.commons.codec.binary.Base64.encodeBase64(baos.toByteArray()));

这绝对不会打印出数组内容。相反,它只会打印出数组引用的地址。

我编写了以下程序来相互测试编码器。您将从下面的输出中看到给出相同的结果:

import java.util.Random;

public class Base64Stuff
{
public static void main(String[] args) {
Random random = new Random();
byte[] randomBytes = new byte[32];
random.nextBytes(randomBytes);

String internalVersion = com.sun.org.apache.xerces.internal.impl.dv.util.Base64.encode(randomBytes);
byte[] apacheBytes = org.apache.commons.codec.binary.Base64.encodeBase64(randomBytes);
String fromApacheBytes = new String(apacheBytes);

System.out.println("Internal length = " + internalVersion.length());
System.out.println("Apache bytes len= " + fromApacheBytes.length());
System.out.println("Internal version = |" + internalVersion + "|");
System.out.println("Apache bytes = |" + fromApacheBytes + "|");
System.out.println("internal equal apache bytes?: " + internalVersion.equals(fromApacheBytes));
}
}

这是它运行的输出:

Internal length = 44
Apache bytes len= 44
Internal version = |Kf0JBpbxCfXutxjveYs8CXMsFpQYgkllcHHzJJsz9+g=|
Apache bytes = |Kf0JBpbxCfXutxjveYs8CXMsFpQYgkllcHHzJJsz9+g=|
internal equal apache bytes?: true

关于java - 如何使用 org.apache.commons.codec.binary.base64 对 Java 对象进行 Base64 编码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10744715/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com