Osatehtävä 1: Syöte- ja tulostevirrat

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.

Osatehtävä 1.1: Syötevirran kopiointi tulostusvirtaan tavu kerrallaan

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.

Osatehtävä 1.2: Tekstimuotoisen syötevirran kopiointi tulostusvirtaan rivi kerrallaan

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?

Osatehtävä 1.3: Syötetiedoston kopiointi tulostiedostoon

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
      

Osatehtävä 1.4: Syötetiedoston kopiointi tulostiedostoon puskuroituna

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:

  1. Kopioi ensin itsellesi tiedosto half-dome.jpeg.
  2. Aja sitten seuraavat komennot:
 
java -Xprof CopyFileBytes half-dome.jpeg i1
java -Xprof CopyFileBytesBuffered half-dome.jpeg i2
      

Optio -Xprof kertoo ohjelman suoritukseen kuluneen ajan.

Osatehtävä 1.5: Tekstimuotoisen syötetiedoston kopiointi tulostiedostoon rivi kerrallaan puskuroituna

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ä.

Osatehtävä 1.6: Syötteen lukeminen URL:sta

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/
      

Last modified: Mon Apr 29 13:39:23 EEST 2002