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ą.
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.
Rozważ główne metody klasy InputStream:
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.
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.
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.
Nazwy metod mówią same za siebie - każdy z nich jest przeznaczony do czytania pewnego rodzaju danych.
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:
Z podpisu konstruktorów można zrozumieć, że pierwszy ustawia domyślnie rozmiar bufora, a w drugim można go ustawić ręcznie.
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>