Java, как и многие современные языки програмиране, поддържа изпълнението на потоци за въвеждане на данни. В Java InputStream е базовият клас за байтови потоци. Този клас е абстрактен, т.е. в хода на програмата не можем да създадем инстанция за него. Въпреки това, има много класове в пакета io, които наследяват и разширяват функционалността на InputStream. За да използвате този клас в кода си, трябва да го импортирате от пакета java.io.InputStream. След това разглеждаме основната функционалност, която осигурява класа InputStream, както и основните класове, които го прилагат.
Преди да започне подробното проучванеметоди на клас InputStream, трябва да се спомене, че той изпълнява интерфейсите Closeable и AutoCloseable. Интерфейсът Closeable ни казва, че трябва да го затворите при завършване на работа с нишка. Това се прави с помощта на метода close (). Тъй като повечето методи на класа InputStream, в случай на грешка, хвърлят изключение от тип IOException, всички операции трябва да се извършат в блок try, а методът close () трябва да бъде поставен в блок за край, така че да работи независимо от резултата от работата в опита на тялото.
Интерфейсът AutoCloseable намалява драстичноколичеството на техническия код, тъй като позволява методът close () да работи автоматично и да не добавя окончателно блок към вашия код. Ако използвате седмата или по-късната версия на Java, InputStream може да бъде поставен в така наречения опит с ресурси, който отнема всички операции за затваряне на потока.
Разгледайте основните методи на класа InputStream:
InputStream се реализира от няколко класа, предназначени за работа с различни източници и типове данни. По-долу е наследственото дърво.
Поток от байтове за четене на информация от файловереализиран от класа FileInputStream. За да отворите файл за четене на байтове, достатъчно е да създадете екземпляр от този клас, предавайки го на конструктора името на файла като аргумент. Ако файлът с прехвърленото име не съществува, ще бъде генерирано изключение от тип FileNotFoundException.
В случай на успешно отваряне на файла, работата с него се извършва с помощта на описаните по-горе методи, тъй като FileInputStream е наследник на InputStream.
Предишният пример описва работата сбайтови стойности, които могат да се интерпретират като символи. Но какво, ако трябва да прочетем цяло число, частична или логическа стойност? За това, в Java, InputStream се разширява непряко от класа DataInputStream. Този клас е обвивка за InputStream, която се предава, когато е създадена като аргумент на конструктора. Този вид поток чете данни в двоична форма.
DataInputStream също така изпълнява интерфейса DataInput и неговите методи за четене на примитивни типове данни. По-долу е даден списък на тези методи.
Имената на методите говорят сами за себе си - всеки от тях е предназначен да чете конкретен тип данни.
Реализира се буфериран поток от данни за четенеклас BufferedInputStream в Java. Входният поток се опакова от този клас. Този клас добавя поток към буфера, който ви позволява да четете не по едно, а за няколко байта едновременно. Това дава възможност значително да се подобри работата на операцията. BufferedInputStream е индиректен потомък на InputStream и съответно наследява всички горепосочени методи.
Този клас има два конструктора:
От подписването на конструкторите е възможно да се разбере, че първият определя размера на буфера по подразбиране, докато във втория има възможност да го настроите ръчно.
Разгледахме основните реализации на InputStream. Ако трябва да конвертирате получените байтове в низ, тогава Java InputStream to String (), за съжаление, не е претоварен, така че трябва да използвате специални помощни програми, например IOUtils от библиотеката Apache Commons.