Implementar Serializable
¿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