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() }
}