Java6以降で利用可能な、JAXB関連クラスのDatatypeConverterを使った、バイト列からのBASE64およびHexBinary16進数文字列との相互変換のサンプル.
DatatypeConverterTest.java
packagejp.seraphyware.datatypeconvertertest; |
importjava.io.FileOutputStream; |
importjava.io.PrintStream; |
importjava.security.SecureRandom; |
importjava.util.Arrays; |
importjavax.xml.bind.DatatypeConverter; |
publicclassDatatypeConverterTest { |
/** |
* ランダムなデータを取得する. |
* @param siz データサイズ |
* @return データ |
*/ |
publicstaticbyte[] getRandom(intsiz) { |
byte[] buf =newbyte[siz]; |
SecureRandom rng =newSecureRandom(); |
rng.nextBytes(buf); |
return buf; |
} |
publicstaticStringtoMultiLine(Stringline, intlimit) { |
StringBuilder buf =newStringBuilder(); |
int col =0; |
for (char c : line.toCharArray()) { |
buf.append(c); |
col++; |
if (col >= limit) { |
col =0; |
buf.append('rnt'); |
} |
} |
return buf.toString(); |
} |
publicstaticvoidmain(String[] args) throwsException { |
// テストデータ作成 |
byte[] data = getRandom(76); |
System.setOut(newPrintStream(newFileOutputStream('result.txt'))); |
System.out.println('** HEX BINARY ** '); |
// byte配列から16進数文字列へ |
String strHex =DatatypeConverter.printHexBinary(data); |
System.out.println('hex='+ strHex); |
// 16進数文字列からbyte配列へ |
byte[] data2 =DatatypeConverter.parseHexBinary(strHex); |
System.out.println('hex verify='+Arrays.equals(data, data2)); |
// Hex化の場合は改行文字等が含んではならない. |
// byte[] data3 = DatatypeConverter.parseHexBinary(toMultiLine(strHex, 77)); |
// System.out.println('verify2=' + Arrays.equals(data, data3)); |
System.out.println(); |
System.out.println('** BASE64 ** '); |
// byte配列からBASE64文字列へ |
String base64 =DatatypeConverter.printBase64Binary(data); |
System.out.println('base64='+ base64); |
// BASE64文字列からbyte配列へ |
byte[] data4 =DatatypeConverter.parseBase64Binary(base64); |
System.out.println('base64 verify='+Arrays.equals(data, data4)); |
String base64ml = toMultiLine(base64, 40); |
System.out.println('base64(multiline)='+ base64ml); |
byte[] data5 =DatatypeConverter.parseBase64Binary(base64ml); |
System.out.println('base64(multiline) verify2='+Arrays.equals(data, data5)); |
} |
} |
result.txt
** HEX BINARY ** |
hex=CA2BE8C7A8BF34AD3ECD94385B36A5F54FAC2626340425A39FB59866C5E3F18F885A498E19665E873A8E20E910C931D8621B36F7FF58646E90C9524F8A5FF06A9E00E98A585D2C84ED5F7294 |
hex verify=true |
** BASE64 ** |
base64=yivox6i/NK0+zZQ4Wzal9U+sJiY0BCWjn7WYZsXj8Y+IWkmOGWZehzqOIOkQyTHYYhs29/9YZG6QyVJPil/wap4A6YpYXSyE7V9ylA |
base64 verify=true |
base64(multiline)=yivox6i/NK0+zZQ4Wzal9U+sJiY0BCWjn7WYZsXj |
8Y+IWkmOGWZehzqOIOkQyTHYYhs29/9YZG6QyVJP |
il/wap4A6YpYXSyE7V9ylA |
base64(multiline) verify2=true |
Code Index Add Codota to your IDE (free). Best Java code snippets using javax.xml.bind. DatatypeConverter (Showing top 20 results out of 7,038). Since DatatypeConverter was only used for Base64 decoding, I've replaced it. @maltalex replaced javax.xml.bind.DatatypeConverter with java.util.Base64.
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment