Osatehtävässä tehdään joukko pieniä Java-ohjelmia, jotka
käsittelevät syöte- ja tulostevirtoja. Oleellista näissä
tehtävissä on valita oikeat pakkaukse java.io
luokat ja niiden operaatiot, joilla kukin tehtävä ratkeaa.
Hyvä esitys syöte- ja tulostevirroista löytyy Sunin IO-tutoriaalista. URL:n käsittelyä kuvataan Sunin verkkoja käsittelevässä tutoriaalissa.
Huom! Tuloksena syntyvät ohjelmat ovat lyhyitä. Jos vastauksestasi näyttää tulevan kovin pitkä (yli 30 riviä koodia), kannattaa miettiä, miten saisit asian tehtyä helpommin.
Tee Java-ohjelma CopyInputBytes, joka kopioi
ohjelman standardisyötevirran System.in ohjelman
standarditulostevirtaan System.out tavu kerrallaan.
Ohjelman tulee kyetä kopioimaan myös binääridataa, ei
pelkästään tekstiä.
Voit testata ohjelmaasi seuraavaan tapaan DOS-ikkunassa (saat
sen esiin Windowsissa menuvalinnalla Start
-> Accessories -> Command Prompt):
java CopyInputBytes < input > output
comp input output
missä input on jokin olemassaoleva tiedosto ja
output tulostustiedosto. Komento comp
kertoo, onko tiedostoissa eroa. Voit käyttää myös komentoa
diff, joka näyttää erot (ks. man
diff).
Binäärisen datan kopiointia voit testata esim. tyyliin
java CopyInputBytes < CopyInputBytes.class > c.classs
comp CopyInputBytes.class c.class
Tiedoston c.class pitäisi olla sisällöltään sama
tiedoston CopyInputBytes.class.
Tee Java-ohjelma CopyInputLines, joka kopioi
ohjelman standardisyötevirran System.in ohjelman
standarditulostevirtaan System.out tekstirivi kerrallaan.
Testaa ohjelmasi samaan tapaan kuin edellisessä osatehtävässä. Kykeneekö ohjelmasi kopioimaan myös binääridataa?
Tee Java-ohjelma CopyFileBytes, joka saa
komentoriviparametrinaan kaksi tiedoston nimeä ja kopioi
ensimmäisen tiedoston sisällön toiseen tiedostoon.
Ohjelman tulee kyetä kopioimaan myös binääridataa, ei
pelkästään tekstiä. Testaa ohjelmasi seuraavaan tapaan:
java CopyFileBytes input output
comp input output
Tee Java-ohjelma CopyFileBytesBuffered, joka toimii
kuten CopyFileBytes, mutta käyttää puskurointia
(engl. buffering) syötön ja tulostuksen nopeuttamiseen.
Vertaa ohjelmien CopyFileBytes ja
CopyFileBytesBuffered nopeutta seuraavasti:
half-dome.jpeg.
java -Xprof CopyFileBytes half-dome.jpeg i1
java -Xprof CopyFileBytesBuffered half-dome.jpeg i2
Optio -Xprof kertoo ohjelman suoritukseen kuluneen ajan.
Tee Java-ohjelma CopyFileLines, joka saa
komentoriviparametrinaan kaksi tiedoston nimeä ja kopioi
ensimmäisen tiedoston sisällön toiseen tiedostoon ja rivi
kerrallaan. Syötetiedosto on tekstimuotoinen. Käytä
puskurointia. Testaa ohjelmasi samaan tapaan kuin edellä.
Tee Java-ohjelma CopyURL, joka saa
komentoriviparametrinaan URL:n ja tulostaa sitä vastaavan
dokumentin sisällön standarditulostusvirtaan. Käytä Javan
valmista luokkaa java.net.URL. Puskuroi syöte ja
lue sitä rivi kerrallaan. Voit testata ohjelmaasi esim. seuraavasti:
java CopyURL http://www.cs.hut.fi/