No entiendo la diferencia de salida entre System.out.println ((char) b) y System.out.write ((char) b) en este ejemplo.
class WriteDemo {
public static void main(String args[])
throws IOException {
byte data[] = new byte[10];
int b;
b = 'é';
System.out.println((char)b);
System.out.write((char)b);
System.out.write('\n');
}
}
(B (char)) grabados System.out.println E mientras que System.out.write ((char) b) imprime Ú.
No entiendo por qué?
Probablemente tiene algo que ver con los bits se descartan pero simplemente parece que no puede averiguar cómo llegar a la letra u.
write
escribe un byte de la secuencia de salida.
print
escribe un carácter de la secuencia de salida.
print
también utiliza codificación por defecto de la plataforma mientras se write
va a escribir el byte conforme a las indicaciones de los documentos aquí .
Presupuesto de los write
documentos:
escribir un carácter que será traducido según la codificación de caracteres por defecto de la plataforma, utilice la impresión (char) o println métodos (carbón de leña).
Nota: char
es 16 bits, mientras que byte
es de 8 bits, es decir, una char
es de dos bytes
perdiendo así la información en el proceso de conversión.
EDITAR:
La razón por la cual write
se la salida de ese personaje para usted es porque estás haciendo básicamente lo siguiente:
System.out.write((byte) 233); //233 is Integer.valueOf('é')
Que es lo mismo que esto:
System.out.write(0xE9);
Así que en la codificación que está utilizando en el que se imprima 0xE9
es Ú
.
Además, la razón por la cual éstos final de la impresión como dos caracteres diferentes en la consola es probablemente debido al char
conseguir traducida a la codificación correcta para print
y luego imprimir en la misma codificación que se traduce, sino porque write
escribe el byte literal y la consola intentos de traducir el byte en la codificación actual de todos modos después del hecho, da lugar a un carácter incorrecto aparece. El personaje que aparece cambiará dependiendo de cuál es la codificación de la consola se establece en, comúnmente Cp1252
o UTF-8
.
Si cambia su consola de codificación para ISO-8859-1
, a continuación, 0xE9
se imprimirá la é
manera correcta y en ambos casos se incluyeron.