1) Hablando en términos prácticos: ¿Cómo codificación de caracteres de trabajo, y cómo se debe hacer con ellos:
Cualquier secuencia de caracteres que se lee en está codificado/descodificado. Java agrupa los detalles de codificación/decodificación como parte del JDK: http://docs.oracle.com/javase/1.6/docs/guide/intl/encoding.doc.html. Ejemplo: UTF-8 issue in Java code.
2) Su pregunta específica: ¿CÓMO maneja el lenguaje multiplataforma JAVA la entrada de la consola que es específica para el sistema operativo?
La respuesta corta: aunque el código de bytes Java es de plataforma neutra, la JVM NO. Es decir, la funcionalidad de transmisión "in/out/err" del "Sistema" de Java no está completamente implementada en el viejo Java normal.
Cuando ejecuta Java, se carga la clase "Sistema", que abstrae la noción básica de un sistema en el que se ejecuta la JVM. En este momento, sus flujos de entrada/salida/error son (es decir, los objetos a los que está accediendo cuando escribe System.in, System.out, System.err están configurados en RUNTIME por ClassLoader, que es responsable, bueno ... clases de carga de Java.
En el caso del "sistema", la carga de clase es una tarea sofisticada, como da a entender, debido a la configuración de la clase Sistema (al igual que la creación de la java Runtime clase) es un nivel más bajo El problema de implementación de JVM es específico del sistema operativo.
De nuevo, solo para ser claros: aunque Java LANGUAGE es independiente de la plataforma, la JVM para su plataforma es, por lo tanto, a diferencia del lenguaje de programación Java, un Entorno específico del sistema operativo que crea los recursos a los que hacemos referencia en nuestro código en tiempo de ejecución.
Para una mayor comprensión: Verifique el código fuente real para la clase del sistema, es muy legible y le dará una mejor comprensión de lo que está pasando. En particular, observe el método nullInputStream():
http://www.java2s.com/Open-Source/Java-Document/6.0-JDK-Core/lang/java/lang/System.java.htm