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

塔萨:

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

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Selenium SouceLabs - java.lang.NoClassDefFoundError: org/apache/commons/codec/binary/Base64

java.lang.NoClassDefFoundError:org / apache / commons / codec / binary / Base64:从使用Maven导入的库jar中

使用org.apache.commons.codec.binary.Base64InputStream解码Base64文件

NoClassFoundError:org.apache.commons.codec.binary / Base64运行时异常

使用Clojure的Apache Commons Codec解码Base64

NoClassDefFoundError:org / apache / tomcat / util / codec / binary / Base64

为什么Java不知道:import org.apache.commons.codec.binary.Base64 ;?

java.lang.ClassNotFoundException:org.apache.commons.codec.binary.Base64

C#中的org.apache.commons.codec.binary.Base64

ANDROID:java.lang.NoSuchMethodError:android中的org.apache.commons.codec.binary.Base64.encodeBase64String

BouncyCastle和Apache Commons Codec Base64编码之间的区别

java.lang.NoSuchMethodError:Java EE应用程序中的org.apache.commons.codec.binary.Base64.encodeBase64String()

没有静态方法encodeBase64String([B)Ljava / lang / String; 在Lorg / apache / commons / codec / binary / Base64类中;或其超一流

Apache Commons Codec Base64是否可以替代sun.misc.BASE64?

Maven包org.apache.commons.codec.binary不存在

如何使用Apache Commons Codec在Java中解码JWT(标题和正文)?

导入 org.apache.commons.codec 无法解析

拒绝访问:http://repo.maven.apache.org/maven2/commons-codec/commons-codec/1.4/commons-codec-1.4.pom,ReasonPhrase:Forbidden

找不到Base64 apache.commons .encodeBase64符号

为什么 java.util.Base64 和 org.apache.commons.ssl.Base64 不兼容?

导入Apache Commons编解码器时无法解析符号“ Base64”

使用Apache Commons的DecodeBase64

使用android.util.Base64以Java进行Base64编码

如何使用寓言(F#)对base64进行编码?

如何使用org.apache.commons.csv包在Java中打印.csv文件的标题?

如何在Java中使用org.apache.commons.lang命名空间?

Commons Codec中的Base64.decode(privateKeyString,Base64.DEFAULT)

如何通过命令行对base64进行编码?

如何对/ dev / random或/ dev / urandom进行base64编码?