Что такое System.in.read()
в java?
Пожалуйста, объясните это.
Каково использование System.in.read()?
Ответ 1
Возможно, этот пример поможет вам.
import java.io.IOException;
public class MainClass {
public static void main(String[] args) {
int inChar;
System.out.println("Enter a Character:");
try {
inChar = System.in.read();
System.out.print("You entered ");
System.out.println(inChar);
}
catch (IOException e){
System.out.println("Error reading from user");
}
}
}
Ответ 2
Два с половиной годами позже лучше, чем никогда, не так ли?
int System.in.read()
считывает следующий байт данных из входного потока. Но я уверен, что вы уже это знали, потому что тривиально искать. Итак, вы, вероятно, спрашиваете:
-
Почему объявлено о возврате
int
, когда в документации говорится, что он читаетbyte
? -
и почему кажется, что он возвращает мусор? (Я печатаю
'9'
, но возвращает57
.)
Он возвращает int
, потому что, помимо всех возможных значений байта, он также должен иметь возможность возвращать дополнительное значение для указания конца потока. Таким образом, он должен возвращать тип, который может выражать больше значений, чем a byte
can.
Примечание. Они могли бы сделать это short
, но вместо этого они выбрали int
, возможно, как вершину шляпы исторического значения для C, функция getc()
также возвращает int
, но что более важно, потому что short
является немного громоздким для работы (язык не предлагает никаких средств для указания литерала short
, поэтому вам нужно указать литерал int
и применить его к short
), плюс на некоторых архитектурах int
имеет лучшую производительность, чем short
.
Кажется, что возвращает мусор, потому что, когда вы просматриваете символ как целое число, то, что вы смотрите, это значение ASCII (*) этого символа. Итак, "9" появляется как 57. Но если вы передадите его персонажу, вы получите "9", так что все хорошо.
Подумайте об этом так: если вы набрали символ "9", то бессмысленно ожидать, что System.in.read()
вернет число 9, потому что тогда какое число вы ожидали бы его возвращения, если бы вы набрали 'a'
? Очевидно, символы должны быть сопоставлены с числами. ASCII (*) - это система отображения символов в числа. И в этой системе символ "9" отображается на номер 57, а не на номер 9.
(*) Не обязательно ASCII; это может быть некоторая другая кодировка, например UTF-16; но в подавляющем большинстве кодировок и, конечно же, во всех популярных кодировках первые 127 значений совпадают с ASCII. И это включает в себя все английские буквенно-цифровые символы и популярные символы.
Ответ 3
System
- это последний класс в пакете java.lang
образец кода из исходного кода api
public final class System {
/**
* The "standard" input stream. This stream is already
* open and ready to supply input data. Typically this stream
* corresponds to keyboard input or another input source specified by
* the host environment or user.
*/
public final static InputStream in = nullInputStream();
}
read()
- абстрактный метод абстрактного класса InputStream
/**
* Reads the next byte of data from the input stream. The value byte is
* returned as an <code>int</code> in the range <code>0</code> to
* <code>255</code>. If no byte is available because the end of the stream
* has been reached, the value <code>-1</code> is returned. This method
* blocks until input data is available, the end of the stream is detected,
* or an exception is thrown.
*
* <p> A subclass must provide an implementation of this method.
*
* @return the next byte of data, or <code>-1</code> if the end of the
* stream is reached.
* @exception IOException if an I/O error occurs.
*/
public abstract int read() throws IOException;
Вкратце от api:
Читает некоторое количество байтов из входного потока и сохраняет их в буферный массив b. Количество фактически прочитанных байтов возвращается как целое число. Этот метод блокируется до тех пор, пока не будут доступны входные данные, конец файл обнаружен или генерируется исключение.
Ответ 4
Чтобы дополнить принятый ответ, вы также можете использовать System.out.read()
следующим образом:
class Example {
public static void main(String args[])
throws java.io.IOException { // This works! No need to use try{// ...}catch(IOException ex){// ...}
System.out.println("Type a letter: ");
char letter = (char) System.in.read();
System.out.println("You typed the letter " + letter);
}
}
Ответ 5
import java.io.IOException;
class ExamTest{
public static void main(String args[]) throws IOException{
int sn=System.in.read();
System.out.println(sn);
}
}
Если вы хотите получить символьный ввод, вы должны выполнить следующее: char sn=(char) System.in.read()
Значение байта возвращается как int в диапазоне от 0 до 255. Однако, в отличие от методов других языков, System.in.read()
читает только байт за раз.
Ответ 6
System.in.read()
читается из стандартного ввода.
Стандартный ввод может использоваться для ввода данных от пользователя в среде консоли, но поскольку у такого пользовательского интерфейса нет средств редактирования, интерактивное использование стандартного ввода ограничено курсами, которые учат программированию.
Большинство производственных применений стандартного ввода находятся в программах, предназначенных для работы внутри командной строки Unix . В таких программах полезная нагрузка, которую обрабатывает программа, поступает со стандартного ввода, и результат программы записывается на стандартный вывод. В этом случае стандартный ввод никогда не записывается непосредственно пользователем, это перенаправленный вывод другой программы или содержимого файла.
Типичный конвейер выглядит следующим образом:
# list files and directories ordered by increasing size
du -s * | sort -n
sort
считывает свои данные со стандартного ввода, что на самом деле является результатом du
. Сортированные данные записываются на стандартный вывод sort
, который заканчивается на консоли по умолчанию и может быть легко перенаправлен на файл или на другую команду.
Таким образом, стандартный ввод сравнительно редко используется в Java.
Ответ 7
Этот пример должен помочь? Наряду с комментариями, конечно > :)
ПРЕДУПРЕЖДЕНИЕ: В ЭТОМ ПАРАГРАФИРОВАНИИ/ПОЧТАХ ЧЕЛОВЕК ЧЕРЕЗ ОГРАНИЧЕННОЕ ЧАСТОЕ
В целом я рекомендую использовать класс Scanner
, так как вы можете вводить большие предложения, я не совсем уверен, что System.in.read
имеет такие аспекты. Если возможно, пожалуйста, поправьте меня.
public class InputApp {
// Don't worry, passing in args in the main method as one of the arguments isn't required MAN
public static void main(String[] argumentalManWithAManDisorder){
char inputManAger;
System.out.println("Input Some Crap Man: ");
try{
// If you forget to cast char you will FAIL YOUR TASK MAN
inputManAger = (char) System.in.read();
System.out.print("You entererd " + inputManAger + " MAN");
}
catch(Exception e){
System.out.println("ELEMENTARY SCHOOL MAN");
}
}
}
Ответ 8
Он позволяет вам читать со стандартного ввода (в основном, консоли). Этот вопрос может помочь вам.
Ответ 9
System.in.read() - метод чтения для класса System.in, который является "стандартным входным файлом" или 0 в обычной ОС.
Ответ 10
I want to know use of System.in.read(). for what purpose it is used.
In the fillowimg program output is a=65535 . why? class Program {
public static void main(String[ ] args) {
try{
int a;
a=(char)System.in.read();
System.out.println("a="+a);
}
catch (Exception b)
{
System.out.println""("exception caught ");
}
}
}
Ответ 11
Метод system.in.read() считывает байт и возвращает целое число, но если вы введете "нет" в диапазоне от 1 до 9, он вернет значения 48+, поскольку в таблице кодов ascii значения 1-9 для ascii равны 48-57., надеюсь, это поможет.