Java / Groovy中的Base64编码

在Java中将byte []转换为Base64字符串的正确方法是什么? 更好的是Grails / Groovy因为它告诉我不推荐使用encodeAsBase64()函数。 建议不要使用sun.misc.BASE64Encoder包,并在某些Windows平台上输出不同大小的字符串。

Apache Commons有许多实用程序:

二进制包: http : //commons.apache.org/codec/apidocs/org/apache/commons/codec/binary/Base64.html

下载: http : //commons.apache.org/codec/download_codec.cgi

在groovy中执行此操作的首选方法是:

  def encoded = "Hello World".bytes.encodeBase64().toString() assert encoded == "SGVsbG8gV29ybGQ=" def decoded = new String("SGVsbG8gV29ybGQ=".decodeBase64()) assert decoded == "Hello World" 

您可以使用开源Base64Coder库

 import biz.source_code.base64Coder.Base64Coder @Grab(group='biz.source_code', module='base64coder', version='2010-09-21') String s1 = Base64Coder.encodeString("Hello world") String s2 = Base64Coder.decodeString("SGVsbG8gd29ybGQ=") 

像这样实现你自己的方法:)

 public class Coder { private static final String base64code = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; public static String encodeAsBase64(String toEncode) { return encodeAsBase64(toEncode.getBytes()) } public static String encodeAsBase64(byte[] toEncode) { int pos = 0; int onhand = 0; StringBuffer buffer = new StringBuffer(); for(byte b in toEncode) { int read = b; int m; if(pos == 0) { m = (read >> 2) & 63; onhand = read & 3; pos = 1; } else if(pos == 1) { m = (onhand << 4) + ((read >> 4) & 15); onhand = read & 15; pos = 2; } else if(pos == 2) { m = ((read >> 6) & 3) + (onhand << 2); onhand = read & 63; buffer.append(base64code.charAt(m)); m = onhand; onhand = 0; pos = 0; } buffer.append(base64code.charAt(m)); } while(pos > 0 && pos < 4) { pos++; if(onhand == -1) { buffer.append('='); } else { int m = pos == 2 ? onhand << 4 : (pos == 3 ? onhand << 2 : onhand); onhand = -1; buffer.append(base64code.charAt(m)); } } return buffer.toString() } 

}