Seguidores

MIS WEBS



viernes, 20 de abril de 2018

SERIALIZAR OBJETOS JAVA


Implementar Serializable 


En anteriores ejercicios hemos visto como crear un buffer para copiar archivos,  ahora vamos a ver como serializar objetos de java. 






¿Qué es serializar un objeto java?

 

Serializar un objeto es convertirlo en un conjunto de bytes, para poderlo transformar en un conjunto de bytes tiene que tener la propiedad de ser serializable. Tener la capacidad de ser serializable le da una gran versatilidad a un objeto de nuestro programa. Una vez convertido en bytes el objeto puede ser trasferido a trabes de la web o archivarlo para cuando lo tengamos que usar reconstruirlo y utilizarlo.
Un poco a lo bruto podemos decir que lo codifica y luego lo descodifica cuando va a utilizarlo.

Clases y métodos necesarios para serializar un objeto java

                              
·         Object

o    Método ToString(): lo podemos utilizar para guardar mensajes y posteriormente reproducirlos con un System.out.print

Ejm.
public String toString(int tipoTexto){
if (tipoTexto==1)              return "se copio el byte     ";
else if (tipoTexto==2)  return "El total de bytes copiados ha sido de    ";
return "";             
        }
        public void ClonadorDeBytes() {       
                try {          
                List cargabytesi = new ArrayList();
FileInputStream Lectura_Bytes = new FileInputStream("C:\\Users\\f\\Desktop\\b/prueba archivo bytes.jpg");
FileOutputStream escritura_Bytes = new FileOutputStream ("C:\\Users\\f\\Desktop\\b/foto copiada por java3.jpg");
                int miByte =0;
                boolean si_NO=true;
                int contador =0;
                //Mientras que el byte read() sea diferente a -1 imprimelo
                while (miByte != -1) { //cargamos los registros en el arrayList
                        miByte= Lectura_Bytes.read();
                        if (miByte != -1) {
                        escritura_Bytes.write(miByte);
                        System.out.println(toString(1) + miByte);
                        contador++;
                        }
                }
        System.out.println(toString(2) +contador);
                Lectura_Bytes.close();escritura_Bytes.close();
                }catch(IOException e){
                        e.getMessage();
                       
                }
       }

El mensaje en consola será el siguiente, tan solo dejo un tramo porque son muchas líneas tantas que ni cabrían en consola porque es el resultado de la clonación de un archivo, dejo la muestra de unas líneas tan solo para verlo.

se copio el byte     255
se copio el byte     217
El total de bytes copiados ha sido de    75373

·         Interface  Serializable
·         Clase ObjectOutpuStream
§  Clase FileOutputStrem
o   Método writeObject()
·         Clase ObjectInputStream
§  Clase FileInputStrem
o   Método readObject()

COMO SERIALIZAR UN OBJETO




Exportar un objeto serializado


Lo primero que tenemos que hacer es buscar la clase de la que proviene el objeto y implementar la interface Serializable.

class archivo_de_Bytes implements Serializable{…………………………………………………….}


Luego crearemos un objeto de archivo_de_Bytes y lo clonaremos. Utilizando la calase toString() crearemos los diferentes mensajes.

public class Lectura1 {
       public static void main(String[] args) {
             archivo_de_Bytes clonarArchivo = new archivo_de_Bytes();
             clonarArchivo.ClonadorDeBytes();       
             System.out.println(clonarArchivo.toString(5));
             try{
ObjectOutputStream Clomar_b = new ObjectOutputStream(new FileOutputStream ("C:\\Users\\f\\Desktop\\c/creado por java 20_04_2018.dat"));
                    Clomar_b.writeObject(clonarArchivo);
                    Clomar_b.close();
                    System.out.println(clonarArchivo.toString(3));
             }catch(Exception e) {System.out.println(clonarArchivo.toString(4));}            
       }
}

----------el método toString() esta dentro de la clase archivo_de_Bytes______
public String toString(int tipoTexto){ 
     if (tipoTexto==1)     return "se copio el byte     ";
else if (tipoTexto==2)     return "El total de bytes copiados ha sido de    ";
else if (tipoTexto==3)     return "El objeto se clono";
else if (tipoTexto==4)     return "no funciona";
else if (tipoTexto==5)     return "Se recupero el archivo del exterior";
 return "";  
       }


Importar un objeto serializado


Igual que antes tenemos que asegurarnos que la clase de la que obtenemos el objeto está serializada. Paralo que tiene que estas implementado la case Serializable.

class archivo_de_Bytes implements Serializable{…………………………………………………….}


Ahora iremos al método main e instanciaremos nuestra clase archivo_de_Bytes. Crearemos un objeto de la clase ObjectInputStream al que le pasaremos por parámetros el objeto FileInputStream (ruta), utilizaremos el método readObject() para abrir el Streming.

public static void main(String[] args) {
             archivo_de_Bytes clonarArchivo = new archivo_de_Bytes();
             clonarArchivo.ClonadorDeBytes();       
             System.out.println(clonarArchivo.toString(5));
            
             try{
//creamos objeto de trasmisión de datos ObjectOutputStream pasandole por parametros la ruta FileOutputStream
ObjectOutputStream Clomar_b = new ObjectOutputStream(new FileOutputStream ("C:\\Users\\n\\Desktop\\n/creado por java 20_04_2018.dat"));
                    //le indicamos que objeto deseamos clonar
                    Clomar_b.writeObject(clonarArchivo);
                    //cerramos el Streaam
                    Clomar_b.close();
                    System.out.println(clonarArchivo.toString(3));
                   
                    //ahora vamos a leer nuestro objeto almacenado
ObjectInputStream  recuperar_datos_de_fuera = new ObjectInputStream (new FileInputStream("C:\\\\Users\\\\n\\\\Desktop\\\\n/creado por java 20_04_2018.dat"));
                   
                    archivo_de_Bytes archivo_recuperado = (archivo_de_Bytes) recuperar_datos_de_fuera.readObject();
                    recuperar_datos_de_fuera.close();
                   
                    archivo_recuperado.ClonadorDeBytes();
                    System.out.println(clonarArchivo.toString(5));
             }catch(Exception e) {System.out.println(clonarArchivo.toString(4));}     
       }
}


Así quedaría el código completo.



public class Lectura1 {
       public static void main(String[] args) {
             archivo_de_Bytes clonarArchivo = new archivo_de_Bytes();
             clonarArchivo.ClonadorDeBytes();       
             System.out.println(clonarArchivo.toString(5));
            
             try{
                    //creamos objeto de trasmisión de datos ObjectOutputStream pasandole por parametros la ruta FileOutputStream
ObjectOutputStream Clomar_b = new ObjectOutputStream(new FileOutputStream ("C:\\Users\\n\\Desktop\\n/creado por java 20_04_2018.dat"));
                    //le indicamos que objeto deseamos clonar
                    Clomar_b.writeObject(clonarArchivo);
                    //cerramos el Streaam
                    Clomar_b.close();
                    System.out.println(clonarArchivo.toString(3));
                   
                    //ahora vamos a leer nuestro objeto almacenado
 ObjectInputStream  recuperar_datos_de_fuera = new ObjectInputStream (new FileInputStream("C:\\\\Users\\\\n\\\\Desktop\\\\n/CRTPJva 20_04_2018.dat"));
                   
//ahora vamos a realizar un casting o refundición del objeto archivo_de_bytes
archivo_de_Bytes archivo_recuperado = (archivo_de_Bytes) recuperar_datos_de_fuera.readObject();
                    recuperar_datos_de_fuera.close();             
                    archivo_recuperado.ClonadorDeBytes();
                    System.out.println(clonarArchivo.toString(5));
             }catch(Exception e) {System.out.println(clonarArchivo.toString(4));}
       }
}
class leeme{
       public void leenos() {
        BufferedReader intermedio;BufferedWriter Archivo_leido;
             try {//abrimos comunicación (Stream)   
intermedio= new BufferedReader (new FileReader("C:\\Users\\n\\Desktop\\n/Prueba lectura.txt"));
Archivo_leido =new BufferedWriter( new FileWriter("C:\\Users\\n\\Desktop\\n/creado por java.txt"));
                    String text_linea="";
                    while(text_linea!= null) {
                           text_linea = intermedio.readLine();
                           if (text_linea != null)Archivo_leido.write(text_linea + "\r"); //si un if tiene tan solo una línea no necesita corchetes
       }intermedio.close(); Archivo_leido.close();  //cerramos el buffer
             } catch (IOException e) {
                   
System.out.println("Mira si el archivo se encuentra en su sitio porque yo no lo veo");
                    e.printStackTrace();
             }     
       }
}
class Crear_archivoYescribirlo{
       public void CrearArchivoEscrito(){
        String TEXTO = ("Este texto aparecerá en el nuevo archivo si todo lo hice bien");
             FileWriter archivoTexto; BufferedWriter Archivo_leido;
             try {
 Archivo_leido =new BufferedWriter( new FileWriter("C:\\Users\\n\\Desktop\\n/CreadoPorJava.txt"));
//le indicamos que hasta que el String llegue al final balla escribiendo cada uno de los caracteres en el archivo
                      Archivo_leido.write(TEXTO);
                     //CERRAMOS ARCHIVO
                    Archivo_leido.close();
             } catch (IOException e) {
                    e.printStackTrace();
             }     
       }     
}
class archivo_de_Bytes implements Serializable{      
       public void ClonadorDeBytes() {        
             try {       
             List cargabytesi = new ArrayList();
FileInputStream Lectura_Bytes = new FileInputStream("C:\\Users\\n\\Desktop\\n/P_archivo bytes.jpg");
FileOutputStream escritura_Bytes = new FileOutputStream ("C:\\Users\\n\\Desktop\\n/FoCOPja3.jpg");
             int miByte =0;
             boolean si_NO=true;
             int contador =0;
             //Mientras que el byte read() sea diferente a -1 imprimelo
             while (miByte != -1) { //cargamos los registros en el arrayList
                    miByte= Lectura_Bytes.read();
                    if (miByte != -1) {
                    escritura_Bytes.write(miByte);
                    System.out.println(toString(1)+miByte);
                    contador++;
                    }
             }
        System.out.println(toString(2)+contador);
             Lectura_Bytes.close();escritura_Bytes.close();
             }catch(IOException e){
                    e.getMessage();                  
             }
       }
       public String toString(int tipoTexto){
     if (tipoTexto==1)     return "se copio el byte     ";
else if (tipoTexto==2)     return "El total de bytes copiados ha sido de    ";
else if (tipoTexto==3)     return "El objeto se clono";
else if (tipoTexto==4)     return "no funciona";
else if (tipoTexto==5)     return "Se recupero el archivo del exterior";
                           return "";
            
            
       }
}

No hay comentarios:

Publicar un comentario

Buscar este blog

Sandisk y Western Digital