Главная страница
Навигация по странице:

  • System.in , System.out и System.err

  • System.out

  • System.out и System.err

  • System.out в PrintWriter

  • PrintWriter

  • InputStream и OutputStream

  • Ответы на вопросы по ревью 4. Java io. Ключевым понятием здесь является понятие потока


    Скачать 1.93 Mb.
    НазваниеJava io. Ключевым понятием здесь является понятие потока
    Дата03.07.2022
    Размер1.93 Mb.
    Формат файлаdoc
    Имя файлаОтветы на вопросы по ревью 4.doc
    ТипДокументы
    #623608
    страница36 из 39
    1   ...   31   32   33   34   35   36   37   38   39

    Стандартный ввод/вывод


    Термин стандартный ввод/вывод относится к концепции Unix (которая в некоторой форме была воспроизведена в Windows и многих других операционных системах) единого потока информации, который используется программой. Весь ввод программы может вестись через стандартный ввод, весь вывод может идти в стандартный вывод, а все сообщения об ошибках могут посылаться в стандартный поток ошибок. Значение стандартного ввода/вывода в том, что программы легко могут представлять цепочку вместе, и стандартный вывод одной программы может стать стандартным вводом для другой. Это достаточно мощный инструмент.

    Чтение из стандартного ввода


    Стандартная модель ввода/вывода в Java имеет System.inSystem.out и System.err. На протяжении всей этой книге вы видели, как писать в стандартный вывод, используя System.out'>System.out, который представляет собой объект PrintStreamSystem.err аналогичен PrintStream, а System.in является производной InputStream без каких-либо включений. Это означает, что в то время, когда вы можете использовать System.out и System.err как они есть, System.in должен куда-то включаться (быть обернут), прежде, чем вы сможете прочесть из него.

    Обычно вы захотите читать ввод построчно, используя readLine( ), так что вы захотите поместить System.in в BufferedReader. Чтобы сделать это, вы можете конвертировать System.in в Reader, используя InputStreamReader. Вот пример, который просто повторяет каждую строку, которую вы печатаете:

    //: c11:Echo.java

    // Как читать стандартный ввод.

    import java.io.*;
    public class Echo {

    public static void main(String[] args)

    throws IOException {

    BufferedReader in =

    new BufferedReader(

    new InputStreamReader(System.in));

    String s;

    while((s = in.readLine()).length() != 0)

    System.out.println(s);

    // Пустая строка прерывает выполнение программы

    }

    } ///:

    Причина указания исключения в том, что readLine( ) может выбросить IOException. Обратите внимание, что System.in обычно должен быть буферизирован, как и большинство потоков.

    Замена System.out на PrintWriter


    System.out - это PrintStream, который является OutputStream. PrintWriter имеет конструктор, который принимает в качестве аргумента OutputStream. Таким образом, если вы хотите конвертировать System.out в PrintWriter, используйте этот конструктор:

    //: c11:ChangeSystemOut.java

    // Перевод System.out в PrintWriter.

    import java.io.*;
    public class ChangeSystemOut {

    public static void main(String[] args) {

    PrintWriter out =

    new PrintWriter(System.out, true);

    out.println("Hello, world");

    }

    } ///:

    Важно использовать двухаргументную версию конструктора PrintWriter и установить второй аргумент в true, чтобы позволить автоматическое освобождение буфера, в противном случае вы можете не увидеть вывода.

    Перенаправление стандартного ввода/вывода


    Класс Java System позволяет вам перенаправлять стандартный ввод, вывод и поток вывода ошибок, используя простой вызов статического метода:

    setIn(InputStream)
    setOut(PrintStream)
    setErr(PrintStream)

    Перенаправление вывода особенно полезно, если вы неожиданно начнете создание большого объема для вывода на экран, а он будет скроллироваться гораздо быстрее, чем выбудете успевать читать.[59] Перенаправление ввода важно для программ командной строки, в которых вы захотите протестировать определенные последовательности пользовательского ввода несколько раз. Вот пример, показывающий использование этих методов:

    //: c11:Redirecting.java

    // Демонстрация перенаправления стандартного ввода/вывода.

    import java.io.*;
    class Redirecting {

    // Исключение выбрасывается на консоль:

    public static void main(String[] args)

    throws IOException {

    BufferedInputStream in =

    new BufferedInputStream(

    new FileInputStream(

    "Redirecting.java"));

    PrintStream out =

    new PrintStream(

    new BufferedOutputStream(

    new FileOutputStream("test.out")));

    System.setIn(in);

    System.setOut(out);

    System.setErr(out);
    BufferedReader br =

    new BufferedReader(

    new InputStreamReader(System.in));

    String s;

    while((s = br.readLine()) != null)

    System.out.println(s);

    out.close(); // Помните об этом!

    }

    } ///:

    Эта программа соединяет стандартный ввод с файлом и перенаправляет стандартный вывод и стандартные ошибки в другой файл.

    Перенаправление ввода/вывода управляет потоками байт, а не потоками символов, то есть, скорее, используются InputStream и OutputStream, чем Reader и Writer.
    1   ...   31   32   33   34   35   36   37   38   39


    написать администратору сайта