Java: InputStream. Strumienie wejściowe

Java, podobnie jak wiele współczesnych językówprogramowanie, wspiera wdrażanie przepływów wprowadzania danych. W Javie InputStream jest klasą podstawową dla strumieni bajtów. Ta klasa jest abstrakcyjna, tzn. W trakcie programu nie możemy utworzyć jej instancji. Jednak w pakiecie io istnieje wiele klas dziedziczących i rozszerzających funkcjonalność InputStream. Aby użyć tej klasy w kodzie, należy ją zaimportować z pakietu java.io.InputStream. Następnie przyjrzymy się podstawowym funkcjom zapewnianym przez klasę InputStream, a także główne klasy, które ją implementują.

Metody dla klasy InputStream

Przed przystąpieniem do szczegółowego badaniametod klasy InputStream, należy wspomnieć, że implementuje interfejsy Closeable i AutoCloseable. Interfejs Closeable informuje nas, że podczas zamykania wątku musi on być zamknięty. Odbywa się to za pomocą metody close (). Ponieważ większość z metod klasy InputStream w przypadku błędu generuje typu wyjątek IOException, wszystkie operacje niezbędne do przeprowadzenia bloku try i bliskiego () metoda wreszcie uczynić jednostkę tak, że zadziała w zależności od wyniku operacji spróbować ciało.

Interfejs AutoCloseable znacznie się zmniejszailość kodu technicznego, ponieważ pozwala on, aby metoda close () działała automatycznie i nie dodawała w końcu bloku do kodu. Jeśli używasz siódmej lub nowszej wersji Javy, możesz umieścić InputStream w tak zwanej try z zasobami, która zajmuje się wszystkimi operacjami zamykania.

java inputstream do łańcucha

Rozważ główne metody klasy InputStream:

  • int available () - Zwraca liczbę bajtów dostępnych do odczytu;
  • int read () - pobiera z zasobu bieżący bajt i zwraca go w postaci liczby całkowitej; jeśli wszystkie bajty są odczytywane, zwraca -1;
  • int read (byte [] buffer) - odczytuje dostępne bajty wokreślony bufor jako tablica bajtu typu (liczba odczytanych bajtów jest równa wielkości określonego bufora, zwraca liczbę odczytanych bajtów, jeśli wszystkie dostępne bajty są odczytywane, zwraca -1);
  • int read (byte [] buffer, int offset, intliczba bajtów) - przeciążenie poprzedniej metody, robi to samo, ale z pozycją wskazaną w "przesunięciu" i odczytuje tyle, ile podano w "liczbie bajtów";
  • long skip (długa liczba bajtów) - pomija określoną liczbę bajtów i zwraca rzeczywistą liczbę bajtów.

InputStream jest implementowany przez kilka klas, zaprojektowanych do pracy z różnymi źródłami i typami danych. Drzewo dziedziczenia zostało przedstawione poniżej.

java inputstream

Czytanie plików

Strumień bajtów do odczytu informacji z plikówimplementowane przez klasę FileInputStream. Aby otworzyć plik do czytania bajtów, wystarczy utworzyć instancję tej klasy, przekazując nazwę pliku do konstruktora jako argument. Jeśli plik o podanej nazwie nie istnieje, zostanie zgłoszony wyjątek typu FileNotFoundException.

W przypadku pomyślnego otwarcia pliku, praca z nimi odbywa się za pomocą metod opisanych powyżej, jest następcą FileInputStream InputStream.

Czytanie prymitywnych typów danych

W poprzednim przykładzie opisano pracę zwartości bajtów, które można interpretować jako symbole. Ale co, jeśli musimy odczytać wartość całkowitą, ułamkową lub logiczną? Aby to zrobić, w Javie InputStream jest pośrednio rozszerzany przez klasę DataInputStream. Ta klasa jest opakowaniem dla InputStream, które jest przekazywane do niego, gdy jest tworzone jako argument do konstruktora. Ten rodzaj strumienia odczytuje dane w formie binarnej.

DataInputStream implementuje również interfejs DataInput i jego metody czytania podstawowych typów danych. Poniżej znajduje się lista tych metod.

java io inputstream

Nazwy metod mówią same za siebie - każdy z nich jest przeznaczony do czytania pewnego rodzaju danych.

Buforowany strumień wejściowy

Buforowany strumień odczytu danych jest zaimplementowanyklasa BufferedInputStream w języku Java. Element inputStream jest zawijany w tej klasie. Ta klasa uzupełnia przepływ za pomocą bufora, który pozwala na odczytanie więcej niż jednego bajtu na raz. Umożliwia to znaczną poprawę wydajności operacji. BufferedInputStream jest pośrednim potomkiem obiektu InputStream, a zatem dziedziczy wszystkie powyższe metody.

Ta klasa ma dwa konstruktory:

  • BufferedInputStream (strumień wejściowy InputStream);
  • BufferedInputStream (strumień wejściowy InputStream, rozmiar bufora int)

Z podpisu konstruktorów można zrozumieć, że pierwszy ustawia domyślnie rozmiar bufora, a w drugim można go ustawić ręcznie.

Wniosek

Omówiliśmy podstawową implementację InputStream. Jeśli musisz przekonwertować odebrane bajty na ciąg znaków, a następnie w Java InputStream to String (), niestety, nie jest przeciążona, więc do tego będziesz musiał użyć specjalnych narzędzi, na przykład IOUtils z biblioteki Apache Commons.

</ p>
Podobało mi się:
0
Powiązane artykuły
Szczegółowe informacje o tym, jak je wykonać
Java nie jest zainstalowana: co mam zrobić? Jak to zrobić
Jak zainstalować Java na Windows 7
Elementy modelu obiektowego Java: abstrakcyjne
Błąd we / wy i jego eliminacja
Java Integrated Development Environment
Urządzenia wejściowe
Korekta błędów "Minecrafta": jak zrobić,
Java: praca z plikami - pisanie, czytanie,
Popularne posty
w górę