Bien esa clase es serializable, pero tengo un problema, el enviarla con writeObject(datos) siendo datos una clase Serializable, cada vez que leo en cliente datos, coloco la nueva longitud con el metodo set de la clase Datos, hasta el final de fichero que será 0.
El problema que tengo que los datos leidos del buffer, es decir, del array de datos, si que los sobreescribe dado a que en la clase datos coloco el .clone()
La clase datos es la siguiente:
Código:
Mientras que el codigo del envio del cliente es el siguiente:package Mensajes; import java.io.Serializable; public class Datos implements Serializable{ /** * */ private static final long serialVersionUID = -2098453470046067754L; private byte [] datos; private int longitud; private int md5; public Datos () { this.datos = new byte[1024]; this.longitud=0; } public void setDatos(byte [] pdatos) { this.datos=pdatos.clone(); } public byte [] getDatos() { return this.datos; } public void setLongitud(int plongitud) { this.longitud= plongitud; } public int getLongitud() { return longitud; } }
Código:
public static void enviar_fichero(ObjectOutputStream entrada, String dir_local,File fichero) { try { // Me pongo a leer fichero y enviar. int len; byte [] buffer_aux = new byte[1024]; FileInputStream lectura_fich = new FileInputStream(fichero); Datos mis_datos = new Datos(); while ((len = lectura_fich.read(buffer_aux)) > 0) { mis_datos.setDatos(buffer_aux); mis_datos.setLongitud(len); System.out.println("LEIDOS: "+mis_datos.getLongitud()); entrada.writeObject(mis_datos); entrada.flush(); } mis_datos.setDatos(buffer_aux); mis_datos.setLongitud(len); entrada.writeObject(mis_datos); entrada.flush(); lectura_fich.close(); } catch (IOException e) { System.out.println("Cli# ERROR: Problema al leer o escribir en la conexión. (Enviar fichero)"); } }
Y la recepcion del servidor lo hace de la siguiente forma:
Código:
Espero que me puedan ayudar, si necesitan alguna información más para ayudarme.try { File fichero_disco = new File (dir_local+"/"+fichero_nombre); FileOutputStream f_out = new FileOutputStream(fichero_disco); byte[] buf_aux = new byte[1024]; int len; Datos recibido = (Datos)salida_objetos.readObject(); while ((len=recibido.getLongitud()) > 0) { System.out.println("RECIBIDO LONGITUD: "+len); f_out.write(recibido.getDatos(), 0, len); recibido = (Datos)salida_objetos.readObject(); } System.out.println("RECIBIDO LONGITUD FINNN: "+recibido.getLongitud()); f_out.close(); System.out.println("Ser# Fichero enviado con éxito."); } catch (ClassNotFoundException e) { System.out.println("Ser# Problema al convertir objeto"); } catch (FileNotFoundException e) { System.out.println("Ser# Problema al convertir objeto"); } catch (IOException e) { System.out.println("Ser# ERROR: Problema al leer o escribir en la conexión."); }
Muchas Gracias!