我一直试图做一个对象序列化和Base64编码的结果。 它与太阳的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()));
什么是正确的方式来实现的ByteArray的正确Base64编码使用Apache的编码器?
其实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
从公共编解码器主页 :
编解码器形成为试图集中发力的一个明确的执行Base64编码的编码器。 在编解码器的建议时,有与Base64编码分布在该基金会的CVS仓库处理大约34个不同的Java类。 在雅加达Tomcat项目开发人员必须实现其已被Commons的HttpClient和Apache XML项目的XML-RPC子项目复制的Base64编码的编解码器的原始版本。 经过近一年的Base64的两个叉版本有显著彼此分歧。 XML-RPC应用了大量的修复和补丁在没有应用到Commons的HttpClient Base64编码。 不同的子项目有不同各级遵守的实现与RFC 2045。
我觉得你的问题是“各种等级”达标。
我的建议是:选择一个的base64编码器/解码器和坚持下去
文章来源: How to Base64 encode a Java object using org.apache.commons.codec.binary.base64?