/ / Java: InputStream. Входни потоци

Java: InputStream. Входни потоци

Java, как и многие современные языки програмиране, поддържа изпълнението на потоци за въвеждане на данни. В Java InputStream е базовият клас за байтови потоци. Този клас е абстрактен, т.е. в хода на програмата не можем да създадем инстанция за него. Въпреки това, има много класове в пакета io, които наследяват и разширяват функционалността на InputStream. За да използвате този клас в кода си, трябва да го импортирате от пакета java.io.InputStream. След това разглеждаме основната функционалност, която осигурява класа InputStream, както и основните класове, които го прилагат.

Методи на клас InputStream

Преди да започне подробното проучванеметоди на клас InputStream, трябва да се спомене, че той изпълнява интерфейсите Closeable и AutoCloseable. Интерфейсът Closeable ни казва, че трябва да го затворите при завършване на работа с нишка. Това се прави с помощта на метода close (). Тъй като повечето методи на класа InputStream, в случай на грешка, хвърлят изключение от тип IOException, всички операции трябва да се извършат в блок try, а методът close () трябва да бъде поставен в блок за край, така че да работи независимо от резултата от работата в опита на тялото.

Интерфейсът AutoCloseable намалява драстичноколичеството на техническия код, тъй като позволява методът close () да работи автоматично и да не добавя окончателно блок към вашия код. Ако използвате седмата или по-късната версия на Java, InputStream може да бъде поставен в така наречения опит с ресурси, който отнема всички операции за затваряне на потока.

java входен поток към низ

Разгледайте основните методи на класа InputStream:

  • int available () - връща броя на наличните байтове за четене;
  • int read () - взема текущия байт от ресурса и го връща в цяло число; ако всички байтове се четат, връща -1;
  • int read (byte [] буфер) - чете наличните байтове впосоченият буфер като масив от тип байт (броят прочетени байтове е равен на размера на указания буфер; връща броя на прочитаните байтове; ако всички налични байтове се четат, връща -1);
  • int чете (байт [] буфер, int офсет, intброят на байтовете - претоварването на предишния метод, прави същото, но от позицията, посочена в "офсет" и чете толкова, колкото е посочено в "броя на байтовете";
  • long skip (дълъг брой байтове) - прескача определен брой байтове и връща действителния брой на пропуснатите.

InputStream се реализира от няколко класа, предназначени за работа с различни източници и типове данни. По-долу е наследственото дърво.

java входен поток

Четене на файлове

Поток от байтове за четене на информация от файловереализиран от класа FileInputStream. За да отворите файл за четене на байтове, достатъчно е да създадете екземпляр от този клас, предавайки го на конструктора името на файла като аргумент. Ако файлът с прехвърленото име не съществува, ще бъде генерирано изключение от тип FileNotFoundException.

В случай на успешно отваряне на файла, работата с него се извършва с помощта на описаните по-горе методи, тъй като FileInputStream е наследник на InputStream.

Четене на примитивни типове данни

Предишният пример описва работата сбайтови стойности, които могат да се интерпретират като символи. Но какво, ако трябва да прочетем цяло число, частична или логическа стойност? За това, в Java, InputStream се разширява непряко от класа DataInputStream. Този клас е обвивка за InputStream, която се предава, когато е създадена като аргумент на конструктора. Този вид поток чете данни в двоична форма.

DataInputStream също така изпълнява интерфейса DataInput и неговите методи за четене на примитивни типове данни. По-долу е даден списък на тези методи.

java io входен поток

Имената на методите говорят сами за себе си - всеки от тях е предназначен да чете конкретен тип данни.

Буфериран входен поток

Реализира се буфериран поток от данни за четенеклас BufferedInputStream в Java. Входният поток се опакова от този клас. Този клас добавя поток към буфера, който ви позволява да четете не по едно, а за няколко байта едновременно. Това дава възможност значително да се подобри работата на операцията. BufferedInputStream е индиректен потомък на InputStream и съответно наследява всички горепосочени методи.

Този клас има два конструктора:

  • BufferedInputStream (входен поток InputStream);
  • BufferedInputStream (входен поток InputStream, размер на буфера за int)

От подписването на конструкторите е възможно да се разбере, че първият определя размера на буфера по подразбиране, докато във втория има възможност да го настроите ръчно.

заключение

Разгледахме основните реализации на InputStream. Ако трябва да конвертирате получените байтове в низ, тогава Java InputStream to String (), за съжаление, не е претоварен, така че трябва да използвате специални помощни програми, например IOUtils от библиотеката Apache Commons.

хареса:
0
Популярни публикации
Духовното развитие
храна
ш