JavaRush /Курси /Java Core /Пишемо свій потік – обгортку на System.in

Пишемо свій потік – обгортку на System.in

Java Core
Рівень 8 , Лекція 7
Відкрита

— Привіт, Аміго! Сьогодні ми будемо займатися дуже цікавою роботою – заміною потоку введення – System.in.

System.in – це проста статична змінна типу InputStream, але привласнити їй нове значення просто так не можна. Зате можна скористатися методом System.setIn().

Для початку нам потрібно створити буфер, потім покласти в нього якісь значення. Потім загорнути в клас, який вміє з цього буфера читати дані протоколу InputStream.

Ось як це виглядає:

Код
public static void main(String[] args) throws IOException {
    //кладемо дані в рядок
    StringBuilder sb = new StringBuilder();
    sb.append("Lena").append('\n');
    sb.append("Olya").append('\n');
    sb.append("Anya").append('\n');
    String data = sb.toString();

    //Обертаємо рядок у клас ByteArrayInputStream
    InputStream is = new ByteArrayInputStream(data.getBytes());

    //Підмінюємо in
    System.setIn(is);

    //викликаємо звичайний метод, який не підозрює про наші маніпуляції
    readAndPrintLine();
}

public static void readAndPrintLine() throws IOException {
    InputStreamReader isr = новий InputStreamReader(System.in);
    BufferedReader reader = новий BufferedReader(isr);

    while (true) {
        String line = reader.readLine();
        if (line == null) break;
        System.out.println(line);
    }
    reader.close();
    isr.close();
}

— Білаабо! Це найцікавіший приклад із усього, що я бачив. Я не знав, що так можна робити. Дякую.

— Нема за що, друже Аміго.

Коментарі (1)
ЩОБ ПОДИВИТИСЯ ВСІ КОМЕНТАРІ АБО ЗАЛИШИТИ КОМЕНТАР,
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ
Olexandr Рівень 47
10 квітня 2024
виходить, що давно можна було замінити ввод с консолі тих же адрес файлів або ще чогось там, що ми постійно використовували в попередніх задачах. Деякі задачі доводилося тестувати раз по 50, поки працювало)))