Понимание различных систем ввода / вывода Java

Я недавно читал учебники Java на oracle.com, и я пытаюсь понять ввод-вывод. Но есть так много вещей, многие из которых выглядят одинаково, например: Потоки данных Сканер Печатный принтер Буферизованные потоки Файл Потоки ввода / вывода Фильтрованные потоки и т. Д.

в частности, например, в чем разница между сканером и потоком данных?

поначалу я мог держать все это в стороне, но было слишком много потоков и операций ввода-вывода. Кто-нибудь знает хороший учебник или веб-сайт, который может все это прояснить. мое непонимание начинает раздражать.

2 ответа

Это сложный вопрос, чтобы ответить. Я знаю предыдущий, когда я изучал сетевое программирование, у меня была такая же путаница.
Вы можете взглянуть на учебные пособия Ларса Фогеля - он пишет хороший код, который облегчает понимание: http://www.vogella.com/tutorials/JavaIO/article.html

Также, если у вас есть хорошая книга, классы Java могут иметь больше смысла после того, как вы с ними познакомитесь. Эллиот "Расти" Гарольд делает хорошую книгу о сетевом программировании на Java: сетевое программирование на Java

Вам нужно ознакомиться с классами "java.io.*" и для чего каждый из них может быть использован. Есть причина, почему их так много, поскольку вы бы использовали один конкретный класс для одного типа приложения.

Scanner можно прикрепить к File, Stream, или же String, Readableили все, что происходит от этих классов. Думайте об этом как о потребителе. Он ест вещи, когда вы просите об этом.

Stream это источник. Некоторые входные потоки имеют сигнал, который говорит: "Я вне ввода!" Если вы продолжаете использовать поток, который уже находится вне ввода, Java обычно ожидает большего ввода или просто выдает исключение. Важно отметить, что когда поток используется, он исчезает навсегда. У некоторых читателей есть механизмы, которые "сбрасывают" поток на более раннюю точку, но эти причудливые механизмы раскола не являются частью стандартного потока. Думайте о них как о реках. Как только вы позволите течь части реки, она исчезнет.

System.in это один из примеров InputStream то есть по умолчанию подключен к консоли. Представьте, что он питается прямо с клавиатуры. Вы можете подключить к нему сканер и попытаться использовать ввод от пользователя. Сканер может захватывать набираемые вами вещи, но если вы не сохраните это в переменной, ваша клавиатура не будет набирать себя снова.

Другие вопросы по тегам