1. OutputStream
clasa
Am explorat recent fluxurile de intrare. Este timpul să vorbim despre fluxurile de ieșire.
Clasa OutputStream
este clasa părinte pentru toate clasele care acceptă ieșirea de octeți. Aceasta este o clasă abstractă care nu face nimic pe cont propriu, dar are clase descendente pentru fiecare ocazie.
Sună extrem de complicat. Pentru a spune mai simplu, această clasă operează pe octeți și nu, de exemplu, caractere sau alte tipuri de date. Iar faptul că este abstract înseamnă că de obicei nu îl folosim, ci mai degrabă una dintre clasele sale descendențe. De exemplu, FileOutputStream
și altele asemenea.
Dar înapoi la OutputStream
clasă. Această clasă are metode pe care toate clasele sale descendente trebuie să le implementeze. Iată pe cele principale:
Metode | Descriere |
---|---|
|
Scrie un octet (nu un int ) în flux. |
|
Scrie o matrice de octeți în flux |
|
Scrie o parte dintr-o matrice de octeți în flux |
|
Scrie toate datele stocate în buffer în flux |
|
Închide fluxul |
Când creați un obiect dintr-o clasă care moștenește InputStream
, de obicei specificați un obiect sursă InputStream
din care citește datele. Când creați un obiect dintr-o clasă care moștenește OutputStream
, de obicei specificați și obiectul țintă sau fluxul în care vor fi scrise datele.
Să trecem pe scurt prin toate metodele clasei OutputStream
:
write(int b)
metodă
Această metodă scrie un octet (nu un int
) în fluxul de ieșire. Valoarea transmisă este transformată într-un octet, iar primii trei octeți ai intului sunt aruncați.
write(byte[] buffer)
metodă
Scrie matricea dată de octeți în fluxul de ieșire. Asta este.
write(byte[] buffer, int offset, int length)
metodă
Scrie o porțiune din matricea de octeți transmisă în fluxul de ieșire. Variabila offset indică indicele primului element al matricei și length
este lungimea subsetului care trebuie scris.
flush()
metodă
Metoda flush()
este utilizată pentru a forța orice date care pot fi stocate în tampon în fluxul curent să fie scrise în fluxul țintă. Acest lucru este relevant atunci când se utilizează buffering și/sau mai multe obiecte de flux aranjate într-un lanț.
close()
metodă
Scrie orice date nescrise în obiectul țintă. Metoda close()
nu trebuie apelată dacă utilizați un try-with-resources
bloc.
Exemplu de copiere a unui fișier
Cod | Notă |
---|---|
|
InputStream pentru citirea dintr-un fișier OutputStream pentru scriere într-un fișier Buffer în care vom citi datele Atâta timp cât există date în flux Citiți date în buffer Scrieți datele din buffer în al doilea flux |
2. Writer
clasa
Clasa Writer
este exact aceeași cu OutputStream
clasa, dar încă o dată o diferență: funcționează cu caractere ( char
) în loc de octeți.
Aceasta este o clasă abstractă: nu puteți crea obiecte ale Writer
clasei. Scopul său principal este să fie o clasă părinte comună pentru sute de clase descendente și să le ofere metode comune de lucru cu fluxurile de caractere.
Metode ale Writer
clasei (și toate clasele sale descendente):
Metode | Descriere |
---|---|
|
Scrie un caracter (nu un int ) în flux. |
|
Scrie o matrice de caractere în flux |
|
Scrie o parte dintr-o matrice de caractere în flux |
|
Scrie un șir în flux |
|
Scrie o parte dintr-un șir în flux |
|
Scrie toate datele stocate în buffer în flux |
|
Închide fluxul |
Metodele sunt foarte asemănătoare cu metodele clasei OutputStream
, dar funcționează cu caractere în loc de octeți.
Descrierea metodelor:
write(int b)
metodă
Această metodă scrie un singur caracter ( char
— nu un int
) în fluxul de ieșire. Valoarea transmisă este turnată la un char
, iar primii doi octeți sunt eliminați.
write(char[] buffer)
metodă
Scrie matricea dată de caractere în fluxul de ieșire.
write(char[] buffer, int offset, int length)
metodă
Scrie o parte din matricea de caractere transmisă în fluxul de ieșire. Variabila offset
indică indexul primului element al matricei și length
este lungimea subsetului care urmează să fie scris.
write(String str)
metodă
Scrie șirul dat în fluxul de ieșire.
write(String str, int offset, int length)
metodă
Scrie o porțiune din șirul dat în fluxul de ieșire: șirul este convertit într-o matrice de caractere. Variabila offset
indică indexul primului element al matricei și length
este lungimea subsetului care urmează să fie scris.
flush()
metodă
Metoda flush()
este utilizată pentru a forța orice date care pot fi stocate în tampon în fluxul curent să fie scrise în fluxul țintă. Acest lucru este relevant atunci când se utilizează buffering și/sau mai multe obiecte de flux aranjate într-un lanț.
close()
metodă
Scrie orice date nescrise în obiectul țintă. Metoda close()
nu trebuie apelată dacă utilizați un try-with-resources
bloc.
Exemplu de program care copiază un fișier text:
Cod | Notă |
---|---|
|
Reader pentru citirea dintr-un fișier Writer pentru scrierea într-un fișier Buffer în care vom citi datele Atâta timp cât există date în flux Citiți date într-un buffer Scrieți datele din buffer în al doilea flux |
StringWriter
clasă
Există o altă clasă interesantă care moștenește Writer
clasa: se numește StringWriter
. Conține un șir mutabil - un StringBuffer
obiect. Și de fiecare dată când „scrieți” ceva obiectului StringWriter
, textul este pur și simplu adăugat în buffer-ul său intern.
Exemplu:
Cod | Notă |
---|---|
|
StringWriter Este creat un flux de caractere țintă ( ) Un șir este scris în buffer-ul din interiorul StringWriter Un șir este scris în buffer-ul din interiorul StringWriter Conversia conținutului unui obiect într-un șir |
În acest caz, StringWriter
clasa este în esență un wrapper peste StringBuffer
clasă, dar StringWriter
clasa este un descendent al Writer
clasei stream și poate fi folosită în lanțuri de obiecte stream. Aceasta este o proprietate destul de utilă în practică.