1. OutputStreamklase
Kamakailan lang ay nag-explore kami ng mga input stream. Oras na para pag-usapan ang tungkol sa mga stream ng output.
Ang OutputStreamklase ay ang parent class para sa lahat ng klase na sumusuporta sa byte na output. Isa itong abstract na klase na walang ginagawa sa sarili nitong, ngunit mayroon itong mga descendant na klase para sa bawat okasyon.
Ito tunog lubhang kumplikado. Upang ilagay ito nang mas simple, ang klase na ito ay tumatakbo sa mga byte, at hindi, halimbawa, mga character o iba pang mga uri ng data. At ang katotohanan na ito ay abstract ay nangangahulugan na karaniwan ay hindi natin ito ginagamit, ngunit sa halip ay isa sa mga descendant na klase nito. Halimbawa, FileOutputStreamat iba pa.
Ngunit bumalik sa OutputStreamklase. Ang klase na ito ay may mga pamamaraan na dapat ipatupad ng lahat ng descendant class nito. Narito ang mga pangunahing:
| Paraan | Paglalarawan |
|---|---|
|
Nagsusulat ng isang byte (hindi isang int) sa stream. |
|
Nagsusulat ng hanay ng mga byte sa stream |
|
Nagsusulat ng bahagi ng isang hanay ng mga byte sa stream |
|
Isinulat ang lahat ng data na nakaimbak sa buffer sa stream |
|
Isinasara ang stream |
Kapag gumawa ka ng object ng isang klase na nagmamana ng InputStream, karaniwan mong tinutukoy ang source object kung saan InputStreamnagbabasa ang data. Kapag gumawa ka ng object ng isang klase na nagmamana ng OutputStream, karaniwan mo ring tinutukoy ang target na object o stream kung saan isusulat ang data.
Sa madaling sabi, suriin natin ang lahat ng mga pamamaraan ng OutputStreamklase:
write(int b)paraan
Ang pamamaraang ito ay nagsusulat ng isang byte (hindi isang int) sa output stream. Ang naipasa na halaga ay inihagis sa isang byte, at ang unang tatlong byte ng int ay itatapon.
write(byte[] buffer)paraan
Isinulat ang ibinigay na hanay ng mga byte sa output stream. Ayan yun.
write(byte[] buffer, int offset, int length)paraan
Nagsusulat ng isang bahagi ng naipasa na hanay ng mga byte sa output stream. Ang offset variable ay nagpapahiwatig ng index ng unang elemento ng array, at lengthang haba ng subset na isusulat.
flush()paraan
Ang flush()pamamaraan ay ginagamit upang pilitin ang anumang data na posibleng na-buffer sa kasalukuyang stream na maisulat sa target na stream. May kaugnayan ito kapag gumagamit ng buffering at/o maramihang stream object na nakaayos sa isang chain.
close()paraan
Nagsusulat ng anumang hindi nakasulat na data sa target na bagay. Ang close()pamamaraan ay hindi kailangang tawagan kung gumagamit ka ng isang try-with-resourcesbloke.
Halimbawa ng pagkopya ng file
| Code | Tandaan |
|---|---|
|
InputStreampara sa pagbabasa mula sa isang file OutputStreampara sa pagsulat sa isang file Buffer kung saan babasahin natin ang data Hangga't mayroong data sa stream Basahin ang data sa buffer Isulat ang data mula sa buffer hanggang sa pangalawang stream |
2. Writerklase
Ang Writerklase ay eksaktong kapareho ng OutputStreamklase, ngunit isang pagkakaiba lang muli: gumagana ito sa mga character ( char) sa halip na mga byte.
Isa itong abstract na klase: hindi ka makakagawa ng mga object ng Writerklase. Ang pangunahing layunin nito ay maging isang karaniwang parent class para sa daan-daang mga descendant na klase at bigyan sila ng mga karaniwang pamamaraan para sa pagtatrabaho sa mga stream ng character.
Mga pamamaraan ng Writerklase (at lahat ng mga descendant na klase nito):
| Paraan | Paglalarawan |
|---|---|
|
Nagsusulat ng isang character (hindi isang int) sa stream. |
|
Nagsusulat ng hanay ng mga character sa stream |
|
Nagsusulat ng bahagi ng hanay ng mga character sa stream |
|
Nagsusulat ng string sa stream |
|
Nagsusulat ng bahagi ng isang string sa stream |
|
Isinulat ang lahat ng data na nakaimbak sa buffer sa stream |
|
Isinasara ang stream |
Ang mga pamamaraan ay halos kapareho sa mga pamamaraan ng OutputStreamklase, ngunit gumagana ang mga ito sa mga character sa halip na mga byte.
Paglalarawan ng mga pamamaraan:
write(int b)paraan
Ang pamamaraang ito ay nagsusulat ng isang character ( char— hindi isang int) sa output stream. Ang naipasa na halaga ay na-cast sa isang char, at ang unang dalawang byte ay itatapon.
write(char[] buffer)paraan
Isinulat ang ibinigay na hanay ng mga character sa output stream.
write(char[] buffer, int offset, int length)paraan
Nagsusulat ng bahagi ng naipasa na hanay ng mga character sa output stream. Ang offsetvariable ay nagpapahiwatig ng index ng unang elemento ng array, at lengthang haba ng subset na isusulat.
write(String str)paraan
Isinulat ang ibinigay na string sa output stream.
write(String str, int offset, int length)paraan
Nagsusulat ng isang bahagi ng ibinigay na string sa output stream: ang string ay na-convert sa isang array ng mga character. Ang offsetvariable ay nagpapahiwatig ng index ng unang elemento ng array, at lengthang haba ng subset na isusulat.
flush()paraan
Ang flush()pamamaraan ay ginagamit upang pilitin ang anumang data na posibleng na-buffer sa kasalukuyang stream na maisulat sa target na stream. May kaugnayan ito kapag gumagamit ng buffering at/o maramihang stream object na nakaayos sa isang chain.
close()paraan
Nagsusulat ng anumang hindi nakasulat na data sa target na bagay. Ang close()pamamaraan ay hindi kailangang tawagan kung gumagamit ka ng isang try-with-resourcesbloke.
Halimbawa ng program na kumukopya ng text file:
| Code | Tandaan |
|---|---|
|
Readerpara sa pagbabasa mula sa isang file Writerpara sa pagsulat sa isang file Buffer kung saan babasahin natin ang data Hangga't mayroong data sa stream Basahin ang data sa isang buffer Isulat ang data mula sa buffer hanggang sa pangalawang stream |
StringWriterklase
May isa pang kawili-wiling klase na nagmamana ng Writerklase: ito ay tinatawag na StringWriter. Naglalaman ito ng nababagong string — isang StringBufferbagay. At sa tuwing "isusulat" mo ang isang bagay sa StringWriterbagay, ang teksto ay idinaragdag lamang sa panloob na buffer nito.
Halimbawa:
| Code | Tandaan |
|---|---|
|
Ang isang target na stream ng character ( StringWriter) ay nilikha Isang string ay nakasulat sa buffer sa loob ng StringWriterIsang string ay nakasulat sa buffer sa loob ng StringWriterPag-convert ng mga nilalaman ng isang bagay sa isang string |
Sa kasong ito, ang StringWriterklase ay mahalagang isang wrapper sa StringBufferklase, ngunit ang StringWriterklase ay isang inapo ng Writerstream class, at maaari itong magamit sa mga chain ng stream object. Ito ay isang medyo kapaki-pakinabang na ari-arian sa pagsasanay.
3. PrintStreamklase
Ang mga klase ng stream ng output ay maaari ding ilagay sa isang chain na may mga intermediary stream na nagsusulat ng data sa target na stream na ipinasa sa kanila. Ang pangkalahatang view ng pakikipag-ugnayan ng mga stream na ito ay ganito ang hitsura:

Ang pinakakawili-wili at maraming nalalaman sa lahat ng mga intermediate na output stream ay PrintStream. Mayroon itong sampu-sampung pamamaraan at kasing dami ng 12 constructor.
Ang PrintStreamklase ay nagmamana ng FilterOutputStreamklase, na nagmamana ng OutputStream. Nangangahulugan iyon na ang PrintStreamklase ay may lahat ng mga pamamaraan ng mga magulang na klase bilang karagdagan sa sarili nitong mga pamamaraan . Narito ang mga pinaka-kawili-wili:
| Paraan | Paglalarawan |
|---|---|
|
Kino-convert ang naipasa na bagay sa isang string at inilalabas ito sa target na stream. |
|
Kino-convert ang naipasa na bagay sa isang string at inilalabas ito sa target na stream. Nagdaragdag ng line break sa dulo |
|
Naglalabas ng isang line break na character sa target na stream |
|
Bumubuo at naglalabas ng string batay sa format na string at sa mga naipasa na argumento; katulad ng String.format()pamamaraan |
At nasaan ang mga sampung mga pamamaraan na ito, itatanong mo?
Well, mayroon itong maraming mga variant ng print()at println()mga pamamaraan na may iba't ibang mga parameter. Maaari silang ibuod sa talahanayang ito.
Hindi kami sisibakin sa mga pamamaraang ito, dahil kilala mo na ang mga ito. Maaari mo bang hulaan kung ano ang nakukuha ko?
Tandaan System.out.println()? Ngunit maaari itong isulat sa dalawang linya:
| Code | Output ng console |
|---|---|
|
|
Ang aming paboritong utos ay isang tawag sa pamamaraan sa static na variable ng klase. At ang uri ng variable na ito ay .System.out.println()println()outSystemPrintStream
Sa maraming antas ng CodeGym, at sa halos bawat gawain, tumatawag ka sa mga pamamaraan ng PrintStreamklase nang hindi mo alam!
Praktikal na paggamit
Ang Java ay may ganitong kagiliw - giliw na klase na tinatawag na ByteArrayOutputStream, na isang dynamic na lumalagong byte array na nagmamana OutputStream.
Ang isang ByteArrayOutputStreambagay at PrintStreambagay ay maaaring i-chain tulad nito:
| Code | Paglalarawan |
|---|---|
|
Gumawa ng write buffer sa memory I-wrap ang buffer sa isang PrintStreamobject Sumulat ng data sa console I-convert ang array sa isang string! Output ng console: |
GO TO FULL VERSION