Foros del Web » Programación para mayores de 30 ;) » Java »

[BufferedReader y readLine()] Utilización correcta

Estas en el tema de [BufferedReader y readLine()] Utilización correcta en el foro de Java en Foros del Web. Hola, Tengo dos pequeños programas que utilizan la arquitectura cliente-servidor y se comunican a través de sockets. En el cliente tengo esto: Código: DataOutputStream message ...
  #1 (permalink)  
Antiguo 17/04/2013, 01:37
 
Fecha de Ingreso: octubre-2008
Mensajes: 276
Antigüedad: 15 años, 6 meses
Puntos: 1
Pregunta [BufferedReader y readLine()] Utilización correcta

Hola,

Tengo dos pequeños programas que utilizan la arquitectura cliente-servidor y se comunican a través de sockets.

En el cliente tengo esto:

Código:
DataOutputStream message = new DataOutputStream(sock.getOutputStream());
String text = "lunes\nmartes\nmiercoles\jueves\nviernes\nsabado\ndomingo\nfin_transmision\n";
message.writeBytes(text);
En el servidor tengo esto otro:

Código:
String line = null;
BufferedReader reader = new BufferedReader(new InputStreamReader(sock.getInputStream(), "UTF-8"));
while((line = reader.readLine()) != null) {
	if (0 == line.compareTo("fin_transmision"))
		break;
}
Como podéis ver, en el bucle que va leyendo las líneas recibidas en el servidor tengo que utilizar una condición de salida del bucle donde se comprueba si la línea leída coincide con un texto utilizado para indicar que el mensaje ha acabado.

Lo hago así porque en caso contrario el readLine() hace que el servidor se quede colgado.

¿Cómo puedo hacer para que funcione bien? ¿Es esta la manera de usarlo correctamente?

Un saludo.
__________________
Uso Apache 2.2 con PHP 5.5.9 y MySQL 5.1
Uso Eclipse IDE for Java Developers, Version: Mars.1 Release (4.5.1), Build id: 20150924-1200 para programar en Java bajo Windows

Última edición por letni; 17/04/2013 a las 01:43
  #2 (permalink)  
Antiguo 17/04/2013, 02:36
Avatar de Fuzzylog  
Fecha de Ingreso: agosto-2008
Ubicación: En internet
Mensajes: 2.511
Antigüedad: 15 años, 8 meses
Puntos: 188
Respuesta: [BufferedReader y readLine()] Utilización correcta

InputStreamReader es para recibir entradas de teclado del usuario, ¿te vale también para esto o igual tenias que usar un StreamReader?

Por otra parte

if (0 == line.compareTo("fin_transmision"))
break;

Sustituyelo por:

System.out.println(line);
if (line.toLowerCase().contains("fin_transmision")) {
break;
}
__________________
if (fuzzy && smooth) {
fuzzylog = "c00l";
return true;
}
  #3 (permalink)  
Antiguo 17/04/2013, 02:42
 
Fecha de Ingreso: octubre-2008
Mensajes: 276
Antigüedad: 15 años, 6 meses
Puntos: 1
Respuesta: [BufferedReader y readLine()] Utilización correcta

Cita:
Iniciado por Fuzzylog Ver Mensaje
InputStreamReader es para recibir entradas de teclado del usuario, ¿te vale también para esto o igual tenias que usar un StreamReader?
No, también sirve para los sockets.

Cita:
Iniciado por Fuzzylog Ver Mensaje
Por otra parte

if (0 == line.compareTo("fin_transmision"))
break;

Sustituyelo por:

System.out.println(line);
if (line.toLowerCase().contains("fin_transmision")) {
break;
}
Me da igual una forma que otra, ya que lo que quiero es no tener que utilizar una condición de salida del bucle.

A ver si alguien nos aclara esto.

Saludos.
__________________
Uso Apache 2.2 con PHP 5.5.9 y MySQL 5.1
Uso Eclipse IDE for Java Developers, Version: Mars.1 Release (4.5.1), Build id: 20150924-1200 para programar en Java bajo Windows
  #4 (permalink)  
Antiguo 17/04/2013, 03:06
Avatar de Fuzzylog  
Fecha de Ingreso: agosto-2008
Ubicación: En internet
Mensajes: 2.511
Antigüedad: 15 años, 8 meses
Puntos: 188
Respuesta: [BufferedReader y readLine()] Utilización correcta

Prueba así:

String line = null;
BufferedReader reader = new BufferedReader(new InputStreamReader(sock.getInputStream(), "UTF-8"));
while(reader.ready()) {
line = reader.readLine();
System.out.println("Linea obtenida: " + line);
}
__________________
if (fuzzy && smooth) {
fuzzylog = "c00l";
return true;
}
  #5 (permalink)  
Antiguo 17/04/2013, 03:10
Avatar de Xerelo  
Fecha de Ingreso: mayo-2009
Mensajes: 2.175
Antigüedad: 15 años
Puntos: 306
Respuesta: [BufferedReader y readLine()] Utilización correcta

DataOutputStream se utiliza para guardar en ficheros objetos de java, InputStreamReader para leer caracteres.

Si guardas los datos como data, tienes que leerlos como data, si los guardas como caracteres tendrás que leerlos como tal.

http://docs.oracle.com/javase/6/docs...eamReader.html
Cita:
It reads bytes and decodes them into characters using a specified charset.
__________________
Cada vez que solucionas los problemas de alguien que no se esfuerza, piensa en que el día de mañana puede llegar a ser tu compañero de trabajo, o peor, tu jefe.

Etiquetas: Ninguno
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 13:40.