viernes, 3 de julio de 2009

UUencode de binario a texto en Java

UUencode de binario a texto
¿Se te ha presentado alguna vez la necesidad de enviar o guardar un fichero binario y no has podido porque solo puedes hacerlo con texto? Pues no pasa nada, con el algoritmo base64 UUEncode se le da una solución elegante a este problema, ya que nos permite convertir binarios a texto y el proceso inverso. Esto es muy usado en el envió de correo y en los sistemas de mensajería instantáneas basados en el protocolo xmpp o jabber.

Como ya es de costumbre, nuestro queridísimo Java nos trae una implementación de dicho algoritmo, la cual estaremos viendo a continuación con un ejemplo práctico.
 
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.logging.Level;
import java.util.logging.Logger;
import sun.misc.UUDecoder;
import sun.misc.UUEncoder;


public class TestUUe {

private static void codifica(String inFichero, String outFichero) throws FileNotFoundException, IOException {
try {
UUEncoder uuec = new UUEncoder(inFichero);
InputStream in = new FileInputStream(inFichero);
BufferedInputStream bufin = new BufferedInputStream(in);
OutputStream out = new FileOutputStream(outFichero);
BufferedOutputStream bufou = new BufferedOutputStream(out);
uuec.encodeBuffer(bufin, bufou);
bufin.close();
bufou.close();
in.close();
out.close();
} catch (IOException e) {
System.out.println(e.toString());
}
}

private static void decodifica(String inFichero, String outFichero) {
try {
UUDecoder uudc = new UUDecoder();
InputStream in = new FileInputStream(inFichero);
BufferedInputStream bufin = new BufferedInputStream(in);
OutputStream out = new FileOutputStream(outFichero);
BufferedOutputStream bufou = new BufferedOutputStream(out);
uudc.decodeBuffer(bufin, bufou);
bufin.close();
bufou.close();
in.close();
out.close();
} catch (IOException e) {
System.out.println(e.toString());
}
}

public static void main(String[] args) {
try {
codifica("fichero a codificar", "fichero de salida");
} catch (FileNotFoundException ex) {
Logger.getLogger(TestUUe.class.getName()).log(Level.SEVERE, null, ex);
} catch (IOException ex) {
Logger.getLogger(TestUUe.class.getName()).log(Level.SEVERE, null, ex);
}
}
}

No hay comentarios:

Publicar un comentario