No convertir a String en ningun momento.
package net.pp.jm.varios; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.UnsupportedEncodingException; import org.apache.commons.codec.binary.Base64; import org.apache.commons.io.IOUtils; import es.depontevedra.portales.portlets.facturae.util.ConstFacturae; public class VariousTest { public static void main(String[] args) throws Exception { FileInputStream fis = new FileInputStream("c:\p.pdf"); byte[] bb = IOUtils.toByteArray(fis); IOUtils.closeQuietly(fis); // lo envia el WS - el cliente lo recibe String fileB64 = Base64.encodeBase64String(bb); byte[] bb2 = Base64.decodeBase64(fileB64); FileOutputStream fos = new FileOutputStream("c:\p2_byte.pdf"); IOUtils.write(bb2, fos); IOUtils.closeQuietly(fos); System.out.println("DONE"); } }
En mi caso tenia el problema que estaba recibiendo el Base64 y este habia sido codificado. Probando codificaciones di con la buena.
String fileB64 = Base64.encodeBase64String(bb); byte[] utf8 = Base64.decodeBase64(fileB64); byte[] latin1 = new String(utf8, "UTF-8").getBytes("ISO-8859-1"); FileOutputStream fos = new FileOutputStream("c:\p2_byte.pdf"); IOUtils.write(bb2, fos); IOUtils.closeQuietly(fos); System.out.println("DONE");