2014-02-06 4 views
1

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

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

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

+0

Это действительно очень просто. Поток '(Input | Output) Stream является потоком байтов от где-то. «Читатель | Писатель» - это поток символов и откуда-то. Все остальное - узор декоратора (буферизация и т. Д.). «Сканер» - это токенизатор символьного потока. P.S не забывайте 'Channel' и' RamdomAccessFiles'. –

ответ

1

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

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

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

1

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

Кроме того, если у вас есть хорошая книга, классы Java может иметь больше смысла после того, как вы освоитесь с ними , Эллиот «Расти» Гарольд делает хорошую книгу программирования Java Java: Java Network Programming

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

Смежные вопросы