1. Aliran data
Jarang ana program minangka pulo dhewe. Program biasane sesambungan karo "donya njaba". Iki bisa kedadeyan liwat maca data saka keyboard, ngirim pesen, ngundhuh kaca saka Internet, utawa, kosok balene, ngunggah file menyang server remot.
Kita bisa ngrujuk marang kabeh prilaku kasebut ing siji tembung: ijol-ijolan data antarane program lan donya njaba. Enteni, iku ora mung siji tembung.
Mesthi, ijol-ijolan data dhewe bisa dipérang dadi rong bagéan: nampa data lan ngirim data. Contone, sampeyan maca data saka keyboard nggunakake Scanner
obyek - iki nampa data. Lan sampeyan nampilake data ing layar nggunakake System.out.println()
printah - iki ngirim data.
Ing pemrograman, istilah "stream" digunakake kanggo njlèntrèhaké pertukaran data. Saka ngendi asale istilah kasebut?
Ing urip nyata, sampeyan bisa duwe aliran banyu utawa aliran kesadaran. Ing pemrograman, kita duwe aliran data .
Aliran minangka alat serbaguna. Padha ngidini program kanggo nampa data saka ngendi wae (input stream) lan ngirim data ing ngendi wae (output stream). Dadi, ana rong jinis:
- Aliran input kanggo nampa data
- A stream output kanggo ngirim data
Kanggo nggawe stream 'nyata', pangripta Jawa nulis rong kelas: InputStream
lan OutputStream
.
Kelas kasebut InputStream
nduweni read()
metode sing ngidini sampeyan maca data saka iku. Lan OutputStream
kelas kasebut duwe write()
metode sing ngidini sampeyan nulis data kasebut. Dheweke uga duwe cara liyane, nanging luwih akeh babagan mengko.
Byte stream
Apa jenis data sing kita ngomong babagan? Apa format njupuk? Ing tembung liya, jinis data apa sing didhukung kelas kasebut?
Iki minangka kelas umum, saengga ndhukung jinis data sing paling umum - byte
. Bisa OutputStream
nulis bita (lan array bait), lan InputStream
obyek bisa maca bait (utawa array bait). Mekaten — padha ora ndhukung jinis data liyane.
Akibaté, aliran iki uga disebut stream byte .
Salah sawijining fitur stream yaiku data mung bisa diwaca (utawa ditulis) kanthi urutan. Sampeyan ora bisa maca data saka tengah stream tanpa maca kabeh data sing sadurunge.
Mangkene carane maca data saka keyboard bisa digunakake ing Scanner
kelas: sampeyan maca data saka keyboard kanthi urutan, baris demi baris. Kita maca baris, banjur baris sabanjuré, banjur baris sabanjuré, lan ing. Kanthi pas, cara maca baris diarani nextLine()
.
Nulis data menyang an OutputStream
uga kedadeyan kanthi urut. Conto sing apik yaiku output konsol. Sampeyan output baris, ngiring dening liyane lan liyane. Iki minangka output urutan. Sampeyan ora bisa output baris pisanan, banjur kaping sepuluh, lan banjur kaloro. Kabeh data ditulis menyang stream output mung sequentially.
Aliran karakter
Sampeyan bubar sinau manawa senar minangka jinis data sing paling populer nomer loro, lan pancen bener. A akèh informasi liwati watara ing wangun karakter lan kabèh strings. Komputer unggul ing ngirim lan nampa kabeh minangka bait, nanging manungsa ora sampurna.
Akuntansi kanggo kasunyatan iki, programer Java nulis rong kelas liyane: Reader
lan Writer
. Kelas kasebut Reader
analog karo InputStream
kelas kasebut, nanging read()
cara kasebut ora diwaca bita, nanging karakter ( char
). Kelas Writer
cocog karo OutputStream
kelas. Lan kaya Reader
kelas, bisa digunakake karo karakter ( char
), ora bita.
Yen kita mbandhingake papat kelas kasebut, kita entuk gambar ing ngisor iki:
Byte (byte) | Karakter (karakter) | |
---|---|---|
Maca data |
|
|
Nulis data |
|
|
Aplikasi praktis
Kelas InputStream
, OutputStream
, Reader
lan Writer
kelas dhewe ora digunakake langsung dening sapa wae, amarga ora ana hubungane karo obyek konkrit sing bisa diwaca data (utawa data bisa ditulis). Nanging kelas papat iki akeh kelas turunan sing bisa nindakake akeh.
2. InputStream
kelas
Kelas kasebut InputStream
menarik amarga dadi kelas induk kanggo atusan kelas turunan. Ora duwe data dhewe, nanging duwe metode sing diwarisake kabeh kelas asale.
Umumé, iku arang kanggo obyek stream kanggo nyimpen data internal. A stream minangka alat kanggo maca / nulis data, nanging dudu panyimpenan. Sing jarene, ana pangecualian.
Metode kelas InputStream
lan kabeh kelas turunane:
Metode | Katrangan |
---|---|
|
Maca siji bait saka stream |
|
Maca array bita saka stream |
|
Maca kabeh bita saka stream |
|
Mlayu n bita ing stream (maca lan dibuwang) |
|
Priksa jumlah bita sing isih ana ing stream |
|
Nutup stream |
Ayo dadi ringkes babagan cara iki:
read()
cara
Cara kasebut read()
maca siji bait saka stream lan ngasilake. Sampeyan bisa uga bingung karo int
jinis bali. Jinis iki dipilih amarga int
jinis integer standar. Telung bait pisanan int
bakal dadi nol.
read(byte[] buffer)
cara
Iki minangka varian liya saka read()
metode kasebut. Ngidini sampeyan maca array byte saka InputStream
kabeh bebarengan. Array sing bakal nyimpen bait kudu dilewati minangka argumen. Cara kasebut ngasilake nomer - jumlah bita sing bener diwaca.
Contone, sampeyan duwe buffer 10 kilobyte lan sampeyan lagi maca data saka file nggunakake kelas FileInputStream
. Yen file mung ngemot 2 kilobyte, kabeh data bakal dimuat menyang buffer array, lan cara kasebut bakal ngasilake nomer 2048 (2 kilobyte).
readAllBytes()
cara
Cara sing apik banget. Iku mung maca kabeh data saka InputStream
nganti entek lan bali minangka Uploaded byte siji. Iki migunani banget kanggo maca file cilik. File gedhe bisa uga ora pas fisik ing memori, lan cara bakal uncalan pangecualian.
skip(long n)
cara
Cara iki ngidini sampeyan ngliwati n bita pisanan saka InputStream
obyek kasebut. Amarga data diwaca kanthi urutan, cara iki mung maca n bita pisanan saka stream lan dibuwang.
Ngasilake jumlah bita sing bener-bener dilewati (yen stream rampung sadurunge n
bait dilewati).
int available()
cara
Cara kasebut ngasilake jumlah bita sing isih ana ing stream kasebut
void close()
cara
Cara kasebut close()
nutup aliran data lan ngeculake sumber daya eksternal sing ana gandhengane. Sawise stream ditutup, ora ana data maneh sing bisa diwaca.
Ayo nulis conto program sing nyalin file sing gedhe banget. Kita ora bisa nggunakake readAllBytes()
cara kanggo maca kabeh file menyang memori. Tuladha:
Kode | Cathetan |
---|---|
|
InputStream kanggo maca saka file OutputStream kanggo nulis menyang file Buffer menyang ngendi kita bakal maca data Anggere ana data ing stream Waca data menyang buffer Tulis data saka buffer menyang stream kapindho |
Ing conto iki, kita nggunakake rong kelas: FileInputStream
minangka turunan InputStream
kanggo maca data saka file, lan FileOutputStream
minangka turunan OutputStream
kanggo nulis data menyang file. Kita bakal ngomong babagan kelas loro mengko.
Titik menarik liyane ing kene yaiku real
variabel. Nalika pamblokiran data pungkasan diwaca saka file, bisa gampang duwe data kurang saka 64KB. Patut, kita kudu output ora kabeh buffer, nanging mung bagean - real
byte pisanan. Iki persis apa sing kedadeyan ing write()
metode kasebut.
3. Reader
kelas
Kelas Reader
minangka analog lengkap saka InputStream
kelas. Bentenipun mung siji iku bisa karo karakter ( char
), ora karo bita. Kaya InputStream
kelas kasebut, Reader
kelas kasebut ora digunakake ing ngendi wae: iku kelas induk kanggo atusan kelas turunan lan nemtokake cara umum kanggo kabeh.
Metode kelas Reader
(lan kabeh kelas turunane):
Metode | Katrangan |
---|---|
|
Maca siji char saka stream |
|
Maca char array saka stream |
|
Skips n chars ing stream (maca lan mbuwang wong-wong mau) |
|
Priksa manawa isih ana sing isih ana ing aliran kasebut |
|
Nutup stream |
Cara kasebut meh padha karo kelas InputStream
, sanajan ana bedane tipis.
int read()
cara
Cara iki maca siji char
saka stream lan ngasilake. Jinis char
widens menyang int
, nanging loro bita pisanan asil tansah nul.
int read(char[] buffer)
cara
Iki minangka varian liya saka read()
metode kasebut. Ngidini sampeyan maca array char saka Reader
kabeh bebarengan. Array sing bakal nyimpen karakter kudu dilewati minangka argumen. Cara ngasilake nomer - jumlah karakter sing bener diwaca.
skip(long n)
cara
Cara iki ngidini sampeyan ngliwati n karakter pisanan saka Reader
obyek kasebut. Kerjane persis padha karo cara analog saka kelas InputStream
. Ngasilake jumlah karakter sing bener dilewati.
boolean ready()
cara
Ngasilake true
yen ana bait sing durung diwaca ing stream.
void close()
cara
Cara kasebut close()
nutup aliran data lan ngeculake sumber daya eksternal sing ana gandhengane. Sawise stream ditutup, ora ana data maneh sing bisa diwaca.
Kanggo mbandhingake, ayo nulis program sing nyalin file teks:
Kode | Cathetan |
---|---|
|
Reader kanggo maca saka file Writer kanggo nulis menyang file Buffer ing ngendi kita bakal maca data Anggere ana data ing stream Waca data menyang buffer Tulis data saka buffer menyang stream kapindho |
GO TO FULL VERSION