Как установить режим STDIN для двоичного в Java?
Что является эквивалентом этой строки кода C++ в Java, которая устанавливает режим stdin в двоичный:
_setmode(_fileno(stdin),_O_BINARY);
Благодарю.
1 ответ
Ни один _setmode(_fileno(stdin),_O_BINARY);
в Windows используется для переключения из текстового режима в двоичный режим, который предотвращает \n
от замены на \r\n
при чтении ввода.
System.in
является общим InputStream
, чья read
Метод возвращает следующий байт, не предполагая ничего о типе ввода:
Читает следующий байт данных из входного потока. Байт значения возвращается как целое число в диапазоне от 0 до 255. Если байт не доступен, поскольку достигнут конец потока, возвращается значение -1. Этот метод блокируется до тех пор, пока не будут доступны входные данные, не будет обнаружен конец потока или сгенерировано исключение.
Поэтому нет необходимости "отключать" текстовый режим, так как он никогда не был "включен" в первую очередь.
Если вы не уверены в контракте, просто прочитайте исходный код, и вы увидите, что двоичный режим активируется (для stdin, stdout и stderr) при инициализации JVM: http://hg.openjdk.java.net/jdk7u/jdk7u/hotspot/file/34aea5177b9c/src/os/windows/vm/os_windows.cpp#l3716:
void os::win32::setmode_streams() {
_setmode(_fileno(stdin), _O_BINARY);
_setmode(_fileno(stdout), _O_BINARY);
_setmode(_fileno(stderr), _O_BINARY);
}