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 Scannerobyek - 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: InputStreamlan OutputStream.
Kelas kasebut InputStreamnduweni read()metode sing ngidini sampeyan maca data saka iku. Lan OutputStreamkelas 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 OutputStreamnulis bita (lan array bait), lan InputStreamobyek 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 Scannerkelas: 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 OutputStreamuga 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: Readerlan Writer. Kelas kasebut Readeranalog karo InputStreamkelas kasebut, nanging read()cara kasebut ora diwaca bita, nanging karakter ( char). Kelas Writercocog karo OutputStreamkelas. Lan kaya Readerkelas, 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, Readerlan Writerkelas 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. InputStreamkelas
Kelas kasebut InputStreammenarik 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 InputStreamlan kabeh kelas turunane:
| Metode | Katrangan |
|---|---|
|
Maca siji bait saka stream |
|
Maca array bita saka stream |
|
Maca kabeh bita saka stream |
|
Mlayu nbita 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 intjinis bali. Jinis iki dipilih amarga intjinis integer standar. Telung bait pisanan intbakal dadi nol.
read(byte[] buffer)cara
Iki minangka varian liya saka read()metode kasebut. Ngidini sampeyan maca array byte saka InputStreamkabeh 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 InputStreamnganti 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 InputStreamobyek 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 nbait 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 |
|---|---|
|
InputStreamkanggo maca saka file OutputStreamkanggo 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: FileInputStreamminangka turunan InputStreamkanggo maca data saka file, lan FileOutputStreamminangka turunan OutputStreamkanggo nulis data menyang file. Kita bakal ngomong babagan kelas loro mengko.
Titik menarik liyane ing kene yaiku realvariabel. Nalika pamblokiran data pungkasan diwaca saka file, bisa gampang duwe data kurang saka 64KB. Patut, kita kudu output ora kabeh buffer, nanging mung bagean - realbyte pisanan. Iki persis apa sing kedadeyan ing write()metode kasebut.
3. Readerkelas
Kelas Readerminangka analog lengkap saka InputStreamkelas. Bentenipun mung siji iku bisa karo karakter ( char), ora karo bita. Kaya InputStreamkelas kasebut, Readerkelas 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 charsaka stream |
|
Maca chararray saka stream |
|
Skips n charsing 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 charsaka stream lan ngasilake. Jinis charwidens 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 Readerkabeh 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 Readerobyek kasebut. Kerjane persis padha karo cara analog saka kelas InputStream. Ngasilake jumlah karakter sing bener dilewati.
boolean ready()cara
Ngasilake trueyen 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 |
|---|---|
|
Readerkanggo maca saka file Writerkanggo 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