Ver Mensaje Individual
  #1 (permalink)  
Antiguo 08/02/2010, 14:33
moisesvs
 
Fecha de Ingreso: junio-2009
Mensajes: 65
Antigüedad: 14 años, 10 meses
Puntos: 0
Problema con Stream en Java

Hola a todos, necesito vuestra ayuda, el caso es que tengo que hacer un aplicación cliente servidor, y para enviar datos de un fichero del cliente al servidor, me he creado un clase Datos, en la cual, tienes un buffer de bytes de 1024, mas la longitud rellena del buffer.

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:
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;
			}
}
Mientras que el codigo del envio del cliente es el siguiente:

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:
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.");
				}
Espero que me puedan ayudar, si necesitan alguna información más para ayudarme.

Muchas Gracias!