1 klasaOutputStream
Właśnie zajęliśmy się strumieniami wejściowymi. Czas porozmawiać o strumieniach wyjściowych.
Klasa OutputStreamjest klasą nadrzędną wszystkich klas obsługujących wyjście bajtowe. Jest to klasa abstrakcyjna, która sama nic nie robi: w tym celu ma klasy potomne na każdą okazję.
Brzmi skomplikowanie. Upraszczając, ta klasa operuje na bajtach, a nie np. znakach czy innych typach danych. A fakt, że jest abstrakcyjny, oznacza, że zwykle nie używamy go, ale jednej z jego klas potomnych. Na przykład FileOutputStreami inni go lubią.
Ale wracając do klasy OutputStream. Ta klasa ma metody, które muszą implementować wszystkie jej klasy potomne. Oto główne:
| Metody | Opis |
|---|---|
|
Zapisuje jeden bajt (nie int) do strumienia. |
|
Zapisuje tablicę bajtów do strumienia |
|
Zapisuje część tablicy bajtów do strumienia |
|
Zapisuje w strumieniu wszystkie dane przechowywane w buforze |
|
Zamyka strumień |
Podczas tworzenia obiektu klasy pochodnej InputStreamzwykle określa się obiekt źródłowy, z którego InputStreammają być odczytywane dane. Kiedy tworzysz obiekt klasy pochodnej, OutputStreamzwykle określasz również obiekt docelowy lub strumień, do którego zostaną zapisane dane.
Omówmy pokrótce wszystkie metody klasy OutputStream:
metodawrite(int b)
Ta metoda zapisuje jeden bajt (nie int) do strumienia wyjściowego. Przekazana wartość jest rzutowana na typ bajtowy, pierwsze trzy bajty są odrzucane.
metodawrite(byte[] buffer)
Zapisuje podaną tablicę bajtów w strumieniu wyjściowym. Wszystko.
metodawrite(byte[] buffer, int offset, int length)
Zapisuje część przekazanej tablicy bajtów do strumienia wyjściowego. Zmienna offset określa numer pierwszego elementu tablicy, lengthdługość fragmentu do zapisania.
metodaflush()
Metoda flush()służy do wymuszania zapisu danych w strumieniu docelowym, który może być buforowany w bieżącym strumieniu. Istotne przy stosowaniu buforowania i/lub kilku obiektów strumieni zorganizowanych w łańcuch.
metodaclose()
Zapisuje wszystkie niezapisane dane w miejscu docelowym. Metodę close()można pominąć, jeśli użyjesz opcji try-with-resources-with-resources.
Przykład — kopiowanie pliku
| Kod | Notatka |
|---|---|
|
InputStreamdo odczytu z pliku OutputStreamdo zapisu do pliku Bufor do którego wczytamy dane Dopóki w strumieniu są dane Wczytaj dane do bufora Zapisz dane z bufora do drugiego strumienia |
2. KlasaWriter
Klasa Writerjest kompletnym odpowiednikiem klasy OutputStream, i znowu tylko z jedną różnicą: działa ze znakami charzamiast bajtów.
To jest klasa abstrakcyjna: Writernie można tworzyć instancji obiektów klasy. Jego głównym celem jest bycie pojedynczą klasą nadrzędną dla setek klas potomnych i zapewnienie im wspólnych metod pracy ze strumieniami znaków.
Metody klasy Writer(i wszystkie jej klasy potomne):
| Metody | Opis |
|---|---|
|
Zapisuje jeden znak (nie int) do strumienia. |
|
Zapisuje tablicę znaków w strumieniu |
|
Zapisuje część tablicy znaków w strumieniu |
|
Zapisuje ciąg znaków w strumieniu |
|
Zapisuje część ciągu do strumienia |
|
Zapisuje w strumieniu wszystkie dane przechowywane w buforze |
|
Zamyka strumień |
Metody są bardzo podobne do metod klasowych OutputStream, z tą różnicą, że działają ze znakami zamiast bajtów.
Krótki opis metod:
metodawrite(int b)
charTa metoda zapisuje pojedynczy znak (nie ) do strumienia wyjściowego int. Przekazana wartość jest rzutowana na char, pierwsze dwa bajty są odrzucane.
metodawrite(char[] buffer)
Zapisuje podaną tablicę znaków w strumieniu wyjściowym.
metodawrite(char[] buffer, int offset, int length)
Zapisuje część przekazanej tablicy znaków do strumienia wyjściowego. Zmienna offsetokreśla numer pierwszego elementu tablicy, lengthdługość zarejestrowanego fragmentu.
metodawrite(String str)
Zapisuje podany ciąg w strumieniu wyjściowym.
metodawrite(String str, int offset, int length)
Zapisuje część podanego ciągu do strumienia wyjściowego: ciąg jest konwertowany na tablicę znaków. Zmienna offsetokreśla numer pierwszego elementu tablicy, lengthdługość zarejestrowanego fragmentu.
metodaflush()
Metoda flush()służy do wymuszania zapisu danych w strumieniu docelowym, który może być buforowany w bieżącym strumieniu. Istotne przy stosowaniu buforowania i/lub kilku obiektów strumieni zorganizowanych w łańcuch.
metodaclose()
Zapisuje wszystkie niezapisane dane w miejscu docelowym. Metodę close()można pominąć, jeśli użyjesz opcji try-with-resources-with-resources.
Przykładowy program kopiujący plik tekstowy:
| Kod | Notatka |
|---|---|
|
Readerdo odczytu z pliku Writerdo zapisu do pliku Bufor do którego odczytamy dane Dopóki w strumieniu są dane Wczytaj dane do bufora Zapisz dane z bufora do drugiego strumienia |
KlasaStringWriter
Jest jeszcze jedna interesująca klasa, która dziedziczy po klasie Writer— jest to StringWriter. Zawiera zmienny napis - obiekt StringBuffer. I za każdym razem, gdy „wpiszesz” coś do obiektu StringWriter, tekst jest po prostu dodawany do wewnętrznego bufora.
Przykład:
| Kod | Notatka |
|---|---|
|
Docelowy strumień znaków jest tworzony StringWriterCiąg jest zapisywany wewnętrznie do bufora StringWriterCiąg jest zapisywany wewnętrznie do bufora StringWriterKonwertuje zawartość obiektu na ciąg znaków |
W tym przypadku StringWriterklasa jest zasadniczo opakowaniem klasy StringBuffer, ale klasa StringWriterjest potomkiem strumienia klas Writeri może być używana w łańcuchach obiektów strumieniowych. Całkiem przydatna funkcja w praktyce.
GO TO FULL VERSION