Red de conocimiento informático - Problemas con los teléfonos móviles - System.out.write y System.out.println

System.out.write y System.out.println

System.out pertenece al tipo PrintStream;

System.out.println('a'); lo que en realidad se llama es el método println(char c) de PrintStream; c) el método es:

public void println(String x) {

sincronizado (esto) {

print(x)

newLine();

}

}

Mira que Println llama al método print(char c). El código fuente del método print(char c) es el siguiente:

public void print(char c) {

write(String.valueOf(c));

}

Se puede ver que se llama al método write(String s). El código para escribir (String s) es el siguiente:

private void write(String s) {

prueba {

sincronizado (esto) {

asegurarOpen();

textOut.write( s);

textOut.flushBuffer()

charOut.flushBuffer(); /p>

if (autoFlush; amp; (s.indexOf('\n') gt; = 0))

out.flush ();

}

}

catch (InterruptedIOException x) {

Thread.currentThread().println(String s) finalmente llama al método newLine().

El código de newLine() es el siguiente:

private void newLine() {

try {

sincronizado (esto) {

asegurarOpen( );

textOut.newLine();

textOut.flushBuffer()

si (autoFlush)

.flush( );

}

}

captura (InterruptedIOException x) {

Thread.currentThread().interrupt() ;

p>

}

captura (IOException x) {

problema = verdadero

}

}

newLine() se actualiza.

System.out.write(a) llama al método PrintStream.write(int b)

El código fuente de write(int b) es el siguiente:

public void write(int b) {

try {

sincronizado (esto) {

asegurarOpen();

p>

out.write(b);

if ((b == '\n') amp; amp ; autoFlush)

out.flush();

target="_blank" target="_blank">moreflush();

}

}

catch (InterruptedIOException x) {

Thread.currentThread().println(String s) no solo se actualizará, sino que también actualizará textOut y charOut al mismo tiempo. tiempo. Es por eso que después de agregar System.out.write('\n'); se muestra, el problema es que no se actualiza.

La segunda pregunta del autor está bien explicada, porque en print(String s), textOut y charOut se actualizan.

¿Qué son textOut y charOut? Consulte la definición en PrintStream:

private BufferedWriter textOut;

private OutputStreamWriter charOut;

textOut y charOut se definen en el método init(OutputStreamWriter osw). El código de init(OutputStreamWriter osw) es el siguiente:

private void init(OutputStreamWriter osw) {

this.charOut = osw;

this.textOut = nuevo BufferedWriter;

this.charOut = nuevo BufferedWriter.

textOut = new BufferedWriter(osw);

}

La función init() se llama en el constructor

public PrintStream(OutputStream out, boolean autoFlush) {

this(autoFlush, out);

init(new OutputStreamWriter(this));

}

Se puede ver que textOut y El flujo de salida operado por charOut es el mismo que out, por lo que los flujos de salida de textOut y charOut también se actualizarán cuando se actualice out, por lo que print (String s) se generará directamente incluso sin "\ n".