Декодировать содержимое Base64 из MimeMultipart - PullRequest
3 голосов
/ 24 июня 2011

У меня есть файл Base64 в одной части моего MimeMessage.Я поставил это так:

DataSource source = new FileDataSource(new File("base64Test.bin"));
bodyPart.setDataHandler(new DataHandler(source));

Затем я хочу декодировать его, используя метод BASE64DecoderStream.decode

String base64 = (String)bodyPart.getContent();
byte [] base64Decoder = BASE64DecoderStream.decode(base64.getBytes());

Проблема в том, что у меня всегда есть ArrayOutOfboundexceptionЯ использую этот метод.

Любой совет, чтобы решить эту проблему?

Ответы [ 2 ]

1 голос
/ 30 октября 2013

Я прочитал BASE64DecoderStream следующим образом:

Обработчик DataHandler = bodyPart.getDataHandler ();System.out.println ("имя вложения:" + handler.getName ());

FileOutputStream fos = new FileOutputStream (новый файл (handler.getName ()));handler.writeTo (fos);

этот OutPutStream содержит данные, которые были записаны в файл.

1 голос
/ 24 июня 2011

Насколько я знаю, Base64DecoderStream принимает InputStream, а не байтовый массив. Как минимум, вам нужно изменить декодирование следующим образом:

ByteArrayInputStream contentStream = new ByteArrayInputStream(base64Content.getBytes());
BASE64DecoderStream decodeStream = new BASE64DecoderStream(contentStream);
int decodedByte
while ((decodedByte = read()) != -1) {
   // handled decoded bytes
}

Возможно, автобокс пытается вам помочь, и создание некоторого "промежуточного" массива мешает работе. Или, может быть, ваше сообщение достаточно велико, и массив не может быть создан достаточно большим. Или, может быть, у вас есть два потока, вызывающих статическое предложение, которое портит внутренние общие буферы.

...