Moduļa 3.1. vingrinājumi

exercise25: Faila pārkodēšana

Mērķis

  • Iepazīties ar atšķirībām starp baitu plūsmām un simbolu plūsmām un to, kā tās vienu par otru iespējams pārveidot
  • Izveidot aplikāciju, kura lasa HTML dokumentu windows-1257 (jeb Javā sakot, "Cp1257") kodējumā, bet raksta to UTF-8 kodējumā.

Darbības

  • Sakompilēt gatavo paraugu FileEncoding.java. * Palaist to ar komandrindu
    java FileEncoding d1s2n1.html out.html
    

    Tam vajadzētu vienu failu nokopēt par otru failu bez izmaiņām

  • Izmantojot citus InputStreamReader un OutputStreamWriter konstruktorus, norādīt tajos atbilstošos kodējumus, t.i. veidu, kā byte'i pārvēršami char'os. Ievērojiet, ka Microsoft pasaulē "Baltic Windows" kodējumu sauc par "windows-1257", bet Javā to pašu kodējumu sauc par "Cp1257". Kodējumu "UTF-8" sauc visur vienādi.
  • Pēc šīm izmaiņām aplikācijas izveidotajam HTML failam vajadzētu būt UTF-8 kodējumā, tomēr META deklarācijā faila sākumā joprojām rakstīts, ka tas ir "charset-1257" kodējumā (tādēļ tas uzliek pārlūkprogrammā nepareizus iestatījumus). Tāpēc modificējiet programmu - ja tā nolasa rindiņu, kurā ir sekojošs apakšstrings:
    content="text/html; charset=windows-1257"
    

    tad to aizstāj ar citu apakšstringu:

    content="text/html; charset=utf-8"
    

    Lai gan HTMLā šī kodējuma deklarācija varētu saturēt papildus tukšumus, un var arī nebūt rakstīta 1 rindā, šo niansi neņemam vērā un pieņemam, ka kodējuma deklarācija ir rakstīta tieši tā, kā minēts augstāk.

  • Pārliecināties, ka aplikācija pārkodē failu par UTF-8 (var atvērt Windows Commander ar taustiņu F3=View un apskatīties heksadecimāli ar "Options-Hex"), un ka tas ir normāli skatāms pārlūkprogrammā.

exercise26: Klienta soketa nolasīšana un iekodēšana ar MD5

Mērķis

  • Pārveidot baitu plūsmu par MD5 hešvērtību
  • Prast izmantot "message digest" rēķināšanas funkcijas
  • Prast izveidot vienkāršu klienta soketu
  • Ja Jums tas jau nav zināms, savā Internet Explorer pārlūkprogrammā noskaidrojiet, kāds ir "proxy" servera vārds un ports. ("Tools"-"Internet Options"-"Connections"-"LAN Settings"-"Advanced").
  • Ja Jums ir "Proxy" serveris, tad turpmāk papildiniet programmu "SocketClientProxy", ja nav, tad "SocketClientNoProxy". Vispirms palaidiet attiecīgo programmu ar kādu no komandrindām:
    java SocketClientProxy 
      http://www.ailab.lv/Teksti/Senie/Kaudz/BK0101.htm 
      10.0.0.1:8080
    

    vai

    java SocketClientNoProxy 
      http://www.ailab.lv/Teksti/Senie/Kaudz/BK0101.htm 
    

    Pārliecinieties, ka uz DOS konsoles drukājas atsūtītā TCP/IP komunikācija - visi HTTP hederi un arī pieprasīto failu saturs.

  • Izmēģiniet aplikāciju MD5Test, kura drukā MD5 hešvērtības vairākiem stringiem
  • Pārveidojiet SocketClient[No]Proxy tā, lai MD5 hešvērtības tiktu rēķinātas tai baitu virknei, kuru saņemam savā soketā pēc HTTP hederiem. (HTTP hederi sākas TIEŠI PĒC baitiem "0A0A" vai "OD0A0D0A", t.i. pēc 2 rindas pārnesumiem.) Varat izsaukt gatavo utilītfunkciju MD5Test.bytesToString(), lai daidžesta baitus pārrakstītu heksadecimāla stringa veidā.
  • Testējiet savu programmu uz URL adreses, kura bieži nemainās. Piemēram, uz http://www.ailab.lv/Teksti/Senie/Kaudz/BK0101.htm. Visiem dalībniekiem vajadzētu iegūt vienu un to pašu heksadecimālo stringu, kurš atbilst romāna pirmajai nodaļai.

exercise27: Rakstīt lietotāja ievadīto tekstu failā

Vingrinājuma mērķis:

Izveidot programmu, kura lasa tekstu no standartievades un raksta to failā, kur katrai rindai sākumā pievienots rindas kārtas numurs. Faila vārdu norāda komandrindas argumentā.

Darbības:

  • Izveidot programmu, kuru sauc TestLineNumbering, kura saņem vienu komandrindas argumentu - izvadāmā faila nosaukumu. Kodam jāpārbauda, vai šis arguments ir nodots.
  • Deklarēt mainīgo ar tipu File, kuru inicializē par failu, kurš ir komandrindas arguments
  • try-catch blokā izveidot buferizētu ieejas plūsmas lasītāju, kurš balstīts uz System.in
  • Izveidot PrintWriter instanci rakstāmajam failam.
  • Rakstiet while ciklu, kurš lasa rindiņas no konsoles ieejas plūsmas un drukā tās failā. Katrai rindiņai priekšā jāliek tās numurs.
  • Aizveriet I/O plūsmas