work sun.misc.BASE64Encoder / Decoder для получения байта [] - PullRequest
9 голосов
/ 15 февраля 2010

Я пытаюсь использовать sun.misc.BASE64Encoder / Decoder, но этот код:

(new sun.misc BASE64Encoder()).encode(new    
    sun.misc.BASE64Decoder().decodeBuffer("test string XML:"))

возвращает "test / string / XML /" Я смущен

Ответы [ 4 ]

22 голосов
/ 15 февраля 2010

Не используйте sun.misc или com.sun классы. Они не гарантируют согласованность между различными версиями JRE.

Используйте commons-codec Base64.encodeBase64(..) и Base64.decodeBase64(..)

15 голосов
/ 06 марта 2012

Класс использования:

javax.xml.bind.DatatypeConverter

Имеет 2 метода интереса:

public static byte[] parseBase64Binary( String lexicalXSDBase64Binary )
public static String printBase64Binary( byte[] val )
7 голосов
/ 15 февраля 2010

Вы сначала декодируете строку "test string XML:", которая на самом деле не является допустимой Base64, поскольку содержит пробелы и двоеточие, ни один из которых не является допустимым символом B64. Я думаю, что вы хотели кодировать затем декодировать , например:

(new sun.misc.BASE64Decoder().decodeBuffer(new sun.misc.BASE64Encoder().encode("test string XML:"))
1 голос
/ 15 февраля 2010

Я думаю, что вы хотите:

String s = "Hello world";
new sun.misc.BASE64Encoder().encode(s.getBytes("UTF-8"));

Еще лучше, используйте утилиту commons, как предлагалось в предыдущем ответе. Используйте sun.misc.Base64Encoder только в том случае, если вы не можете добавить внешнюю зависимость к другому банку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...