2013-04-30 3 views
0

Я недавно изучал пакет java.io, и мне было интересно, где я могу найти точные процессы, которые выполняют абстрактные классы внутри InputStream и OutputStream.Абстрактные методы InputStream и OutputStream

Я ослеплен, потому что, по крайней мере, согласно исходному коду, основные методы являются абстрактными (например, InputStream.read() и OutputStream.write(int b)). Меня особенно беспокоят тесные методы, чьи javadocs явно говорят, что они ничего не делают:

Закрывает этот поток ввода и освобождает любые системные ресурсы, связанные с потоком.

close способ InputStream ничего не делает.

Ну, входные потоки, очевидно, записываются при чтении выходных потоков, и, безусловно, close() должен выполнять сброс и освобождение ресурсов.

Кто-нибудь может дать мне объяснение?

ответ

1

Эти классы являются абстрактными, поскольку они могут быть легко расширены, а классы-разработчики могут использовать шаблон Decorator (как показано на рисунке here). С образцом декоратора класс-разработчик может добавлять динамические функции во время выполнения. Например: есть InputStream, который может читать файл, используя FileInputStream, который может читать сериализованные объекты, используя ObjectInputStream. Как это сделать?

ObjectInputStream ois = new ObjectInputStream(
    new FileInputStream(new File("/path/to/file.dat")); 
+0

Действительно, многие потоки наследуют эти абстрактные классы. Однако, не используя какой-либо наследуемый класс, работа 'inputstream' и' outputstream' работают и что-то делают. Они действительно могут отправлять и получать байты. Я спрашиваю об этой основной фазе процесса, без каких-либо расширенных классов. :) Есть идеи? – Ruluk

+0

@ Ruluk, если вы хотите использовать простые 'InputStream' и' OutputStream', вы просто не можете, так как они являются «абстрактными» классами. Вы ** всегда ** должны использовать реализацию этих классов. Обратите внимание, что класс реализации содержит реальную логику/работу. –

+0

Спасибо за информацию! Я думал, что он что-то сделал, потому что я использовал их непосредственно в одном учебнике, но теперь я проанализировал дальше, и они просто базовые потоки, которые ссылаются на класс потомства. – Ruluk

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