readLine
- hereda de la clase BufferedReader lector, y de un nuevo método de lectura de fila:
String readLine()
Este método devuelve una cadena que no contiene el contenido del terminador desviado, y si el final de la secuencia esnull
; - Utilice los siguientes ejemplos:
public class Test {
public static void main(String[] args) throws IOException {
// 创建流对象
BufferedReader br = new BufferedReader(new FileReader("C:\\Users\\80626\\Desktop\\1.txt"));
// 定义字符串,保存读取的一行文字
String line = null;
// 循环读取,读取到最后返回null
while ((line = br.readLine()) != null) {
System.out.print(line);
System.out.println("------");
}
// 释放资源
br.close();
}
}
El método 1. API
public String readLine() throws IOException {
return readLine(false);
}
- De hecho, llamando al
String readLine(boolean ignoreLF)
método,ignoreLF = true
haciendo caso omiso de la siguiente nueva línea'\n'
;
/** If the next character is a line feed, skip it */
private boolean skipLF = false;
- BufferedReader clase variables privadas
skipLF = false
; - Lea las instrucciones muestra que
readLine()
la función principal del método es leer una línea de texto, los avances de línea'\n'
, retorno de carro'\r'
, avance de línea después de un retorno de carro, o llegar al final del archivo se considera que ser terminada. Devuelve una cadena que contiene el contenido de la línea, que no incluye ningún carácter de línea de terminación , si llega a la final de la secuencia sin ningún tipo de caracteres leídos, en comparaciónnull
.readLine()
El método es el siguiente:
String readLine(boolean ignoreLF) throws IOException {
StringBuffer s = null;
int startChar;
synchronized (lock) {
ensureOpen();
boolean omitLF = ignoreLF || skipLF;
bufferLoop:
for (;;) {
if (nextChar >= nChars)
fill();
if (nextChar >= nChars) { /* EOF */
if (s != null && s.length() > 0)
return s.toString();
else
return null;
}
boolean eol = false;
char c = 0;
int i;
/* Skip a leftover '\n', if necessary */
if (omitLF && (cb[nextChar] == '\n'))
nextChar++;
skipLF = false;
omitLF = false;
charLoop:
for (i = nextChar; i < nChars; i++) {
c = cb[i];
if ((c == '\n') || (c == '\r')) {
eol = true;
break charLoop;
}
}
startChar = nextChar;
nextChar = i;
if (eol) {
String str;
if (s == null) {
str = new String(cb, startChar, i - startChar);
} else {
s.append(cb, startChar, i - startChar);
str = s.toString();
}
nextChar++;
if (c == '\r') {
skipLF = true;
}
return str;
}
if (s == null)
s = new StringBuffer(defaultExpectedLineLength);
s.append(cb, startChar, i - startChar);
}
}
}
- Leer BufferedReader clase, hay una variables de clases particulares
defaultCharBufferSize
:
private static int defaultCharBufferSize = 8192;
- Visible,
readLine()
llamada un bucle infinito, continuará para agregar datos a Buffer, si no se especifica el tamaño del búfer, elreadLine()
tampón utilizado son 8192 caracteres (8 * 1024), antes de alcanzar el tamaño del búfer, sólo se encontró/r
,/n
,/r/n
no regresará ; - Cuando se utiliza socket de flujo de datos o similar, se debe evitar
readLine()
, con el fin de evitar la espera de un retorno de carro y avance de línea o que ha sido bloqueada;
2. Consideraciones modo de red
- En la red
readLine()
se modo, es decir, si el bloqueoreadLine()
no leer los datos, siempre va a ser bloqueada, en lugar de regresarnull
, por lo que si desea realizar después de la operación, mientras que la forma de bucle relacionada no es posible, ya que es un muerto ciclo, una vez que los datos no se lee, comenzó a obstruir, y por lo tanto nunca puede ser ejecutado forma exterior mientras que la operación de bucle, la operación debe ser colocado en el interior del bucle while; - En el interior del bucle while para determinar
readLine()!= null
cuándo debe asignar una cadena, porque si nonull
, entonces este tiempo de la línea que se ha leído. Siwhile (br.readLine()!=null)
, a continuación, el siguiente no puede llegar a la línea de nuevo, por lo que se debe utilizarwhile ((line = br.readLine())!=null){}
; readLine()
Por uno de los siguientes caracteres se puede considerar una línea discontinuada: nueva línea'\n'
, retorno de carro'\r'
seguido inmediatamente o después de un avance de línea de retorno de carro, así que agregamos estos identificadores más tarde, cuando el envío de datos de nuevo, de lo contrario el programa se bloqueará. Esta directamente usando el siguiente método:PrintStream ps = new PrintStream(socket.getOutputStream(), true, "UTF-8");ps.println();
,ps.println()
se ha incluido para el viaje, así que no useprint()
, si es necesario para ser seguido por el carácter de nueva línea;readLine()
Sólo una anomalía se produce en el flujo de datos o el otro extremo esclose()
cuando está apagado, no devuelvenull
un valor.
Lectura recomendada: la Corriente del búfer de la secuencia de Java tamponada >>>