Análisis comparativo de los métodos read () y readline () del flujo de entrada de Java [explicación de ejemplo]

Tabla de contenido

El método read () lee el flujo de entrada

El método Readline () lee el flujo de entrada


¡Hola! Hola a todos, soy el pequeño simio gris, un programador que puede escribir errores,

He estado haciendo desarrollo de proyectos recientemente, por lo que rara vez tengo tiempo para ocuparme del blog, hoy me tomé un momento para compartir con ustedes algunos pequeños problemas que encontré en el desarrollo.

Al usar el protocolo TCP / IP para la comunicación de red, encontré un problema de este tipo, es decir, en la misma red de área local, como cliente, cuando me comunico con otra computadora como servidor, encontré que C / se puede establecer entre los dos S están conectados, pero para los datos enviados por el servidor, cuando leo la longitud del flujo de entrada de caracteres con el método read (), muestra que la lectura falló y el tipo de error es;

java.net.SocketTimeoutException: tiempo de lectura agotado

Es decir, el tiempo de lectura es tiempo extra, pero los datos enviados desde el servidor no son muy largos, por lo que en circunstancias normales, la situación de tiempo de espera de lectura generalmente no ocurre. Después de un estudio cuidadoso, se encuentra que el método read () lee un Los caracteres individuales terminarán al final de la transmisión, lo que significa que siempre que la parte que se conecte haya estado enviando datos repetidamente, entonces read () habrá estado leyendo una secuencia de entrada muy larga, lo que, por supuesto, causará fácilmente tiempos de espera de lectura. es, y la prueba que hice fue hacer que el servidor siempre envíe los mismos datos al cliente. Obviamente, es obviamente imposible leer una operación de este tipo con el método read ().

Se encuentra la razón, y el siguiente paso es cómo resolverlo. Después de buscar información en Internet, descubrí que además del método read (), también existe un método readline () para leer datos de flujo de entrada, pero existen diferencias obvias en el uso de los dos.

 

El método read () lee el flujo de entrada

El método read () lee un solo carácter. También se puede decir que siempre se leerá mientras haya un flujo de entrada. El valor devuelto es: el carácter leído como un entero (el rango es de 0 a 65535 ( 0x00-0xffff)), si se ha alcanzado el final de la secuencia, se devuelve -1

Por lo tanto, al usar este método, debe intentar evitar el envío repetido de datos de flujo de entrada, lo que hará que read () lea datos repetidos durante mucho tiempo, lo que resultará en un tiempo de espera de lectura, pero para los flujos de entrada que solo envían una vez, puede usar read () Method, el uso específico es el siguiente:

InputStream is = client.getInputStream(); //获取到客户端的输入流
byte[] b = new byte[1024]; //定义字节数组
int len = is.read(b); //由于信息的传输是以二进制的形式,所以要以二进制的形式进行数据的读取
String data = new String(b, 0,len);
System.out.println("输入流消息:" + data);

  

El método Readline () lee el flujo de entrada

El método readLine lee una línea de texto. Una línea puede considerarse terminada por uno de los siguientes caracteres: salto de línea ('\ n'), retorno de carro ('\ r') o retorno de carro seguido directamente por un salto de línea. El valor devuelto es: una cadena que contiene el contenido de la línea, sin ningún terminador de línea, si se ha alcanzado el final de la secuencia, se devuelve un valor nulo

Es decir, siempre que el flujo de entrada leído por el método readLine contenga un retorno de carro y un avance de línea, la lectura finaliza. De esta manera, para la información del flujo de entrada que se envía continuamente repetidamente, podemos agregar un retorno de carro y salto de línea al final de cada mensaje. Por lo tanto, el método readLine terminará automáticamente cuando se lea el símbolo,

El uso específico es el siguiente:

BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream(), "gb2312"));
String msg = br.readLine();
if(msg != null) {
    System.out.println("收到输入流信息:" + msg + "\n");
}

Bueno, compartiré con ustedes la introducción de los dos métodos para leer la información del flujo de entrada en la comunicación de red.

¡Siéntete bien, recuerda dar me gusta y seguir !

¡El lobo feroz os acompaña para progresar juntos!

 

Supongo que te gusta

Origin blog.csdn.net/weixin_44985880/article/details/109729502
Recomendado
Clasificación