Estamos trabajando para reducir la latencia y aumentar el rendimiento de un proceso escrito en Java que consume datos (cadenas xml) de un socket mediante el método readLine() de la clase BufferedReader. Los datos están delimitados por el separador de fin de línea (\ n), y cada línea puede tener una longitud variable (6KBits - 32KBits). Nuestro código es el siguiente:Java: Eficiencia del método readLine del BufferedReader y posibles alternativas
Socket sock = connection;
InputStream in = sock.getInputStream();
BufferedReader inputReader = new BufferedReader(new InputStreamReader(in));
...
do
{
String input = inputReader.readLine();
// Executor call to parse the input thread in a seperate thread
}while(true)
Así que tengo un par de preguntas:
- ¿El retorno inputReader.readLine método() tan pronto como llega el carácter \ n o va a esperar hasta el el búfer está lleno?
- ¿Hay un más rápido de recogida de datos del zócalo que utilizando un BufferedReader?
- ¿Qué sucede cuando el tamaño de la cadena de entrada es menor que el tamaño del búfer de recepción del zócalo?
- ¿Qué sucede cuando el tamaño de la cadena de entrada es más grande que el tamaño del búfer de recepción del zócalo?
Estoy aprendiendo (lentamente) con las bibliotecas IO de Java, por lo que cualquier puntero es muy apreciado.
¡Gracias!
supongo que está utilizando un formato específico de la aplicación - saltos de línea y espacios en blanco son, en general, no es significativo en XML. – mdma
Sí, lo siento debería ser más claro.Estamos consumiendo datos de transmisión desde una aplicación externa a través de una conexión TCP. Cada mensaje XML está separado por un carácter \ n. Supongo que es idéntico a leer un archivo secuencialmente donde cada línea es un documento xml completamente formado. – Luhar