1. OutputStream
klase
Kamakailan lang ay nag-explore kami ng mga input stream. Oras na para pag-usapan ang tungkol sa mga stream ng output.
Ang OutputStream
klase 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, FileOutputStream
at iba pa.
Ngunit bumalik sa OutputStream
klase. 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 InputStream
nagbabasa 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 OutputStream
klase:
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 length
ang 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-resources
bloke.
Halimbawa ng pagkopya ng file
Code | Tandaan |
---|---|
|
InputStream para sa pagbabasa mula sa isang file OutputStream para 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. Writer
klase
Ang Writer
klase ay eksaktong kapareho ng OutputStream
klase, 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 Writer
klase. 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 Writer
klase (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 OutputStream
klase, 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 offset
variable ay nagpapahiwatig ng index ng unang elemento ng array, at length
ang 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 offset
variable ay nagpapahiwatig ng index ng unang elemento ng array, at length
ang 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-resources
bloke.
Halimbawa ng program na kumukopya ng text file:
Code | Tandaan |
---|---|
|
Reader para sa pagbabasa mula sa isang file Writer para 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 |
StringWriter
klase
May isa pang kawili-wiling klase na nagmamana ng Writer
klase: ito ay tinatawag na StringWriter
. Naglalaman ito ng nababagong string — isang StringBuffer
bagay. At sa tuwing "isusulat" mo ang isang bagay sa StringWriter
bagay, 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 StringWriter Isang string ay nakasulat sa buffer sa loob ng StringWriter Pag-convert ng mga nilalaman ng isang bagay sa isang string |
Sa kasong ito, ang StringWriter
klase ay mahalagang isang wrapper sa StringBuffer
klase, ngunit ang StringWriter
klase ay isang inapo ng Writer
stream class, at maaari itong magamit sa mga chain ng stream object. Ito ay isang medyo kapaki-pakinabang na ari-arian sa pagsasanay.
3. PrintStream
klase
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 PrintStream
klase ay nagmamana ng FilterOutputStream
klase, na nagmamana ng OutputStream
. Nangangahulugan iyon na ang PrintStream
klase 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()
out
System
PrintStream
Sa maraming antas ng CodeGym, at sa halos bawat gawain, tumatawag ka sa mga pamamaraan ng PrintStream
klase 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 ByteArrayOutputStream
bagay at PrintStream
bagay ay maaaring i-chain tulad nito:
Code | Paglalarawan |
---|---|
|
Gumawa ng write buffer sa memory I-wrap ang buffer sa isang PrintStream object Sumulat ng data sa console I-convert ang array sa isang string! Output ng console:
|
GO TO FULL VERSION