Datový proud: Porovnání verzí

Smazaný obsah Přidaný obsah
m →‎Bajtové proudy: ČJ za použití AWB
Závěrečné sekce dle doporučení
Řádek 5:
 
== Přehled ==
 
Proudy vznikly jako náhrada [[Rigidita|rigidního]] propojení [[Proces (informatika)|procesů]] a zařízení v [[Unix]]u v 80. letech 20. století. Před zavedením proudů se programy musely explicitně připojovat k zařízením a programům. Programátor musel brát v úvahu různá [[rozhraní (informatika)|rozhraní]], různou reprezentaci dat. Datové proudy umožnily od těchto problémů [[abstrakce|abstrahovat]] vytvořením jednotného rozhraní.
 
Řádek 22 ⟶ 21:
 
== Proudy v Javě ==
 
V jazyku [[Java (programovací jazyk)|Java]] existuje několik [[Třída (programování)|tříd]], které se zabývají přenosem různých typů dat. Většina z nich se nachází v balíčku (''package'') <tt>''java.io''</tt>. Třídy pro práci se soubory se nacházejí v balíčku <tt>''java.nio.file''</tt>.<ref>{{Citace elektronické monografie|příjmení = |jméno = |titul = Lesson: Basic I/O|url = http://docs.oracle.com/javase/tutorial/essential/io/index.html|vydavatel = Oracle|místo = |datum vydání = 2015|korporace = Oracle}}</ref>
 
=== Bajtové proudy ===
 
Všechny vstupní třídy jsou potomky třídy <tt>''InputStream''</tt> a výstupní třídy potomky <tt>''OutputStream''</tt>. Nejzákladnějším typem proudu je [[bajt|bajtový]] proud. Tento proud čte nebo zapisuje data na nízké úrovni po 8bitových svazcích. Doporučuje se tento typ proudu nepoužívat, protože existují specializovanější alternativy (viz dále).
 
Řádek 65 ⟶ 62:
 
=== Znakové proudy ===
 
Java používá pro vnitřní reprezentaci znaků kódování [[Unicode]]. Znakové proudy s tím počítají a dokážou toto kódování při zápisu a čtení překládat na jiná. Všechny vstupní třídy jsou potomky třídy <tt>''Reader''</tt> a všechny výstupní třídy jsou potomky třídy <tt>''Writer''</tt>.
 
Řádek 100 ⟶ 96:
</pre>
=== Proudy s vyrovnávací pamětí ===
 
Běžně je každý požadavek na zápis nebo čtení zpracováván přímo operačním systémem. To může vést k neefektivitě programu, protože každý takový požadavek může potřebovat např. přistupovat k [[Pevný disk|disku]] nebo [[Síťová vrstva|síťovým zdrojům]], což jsou časově relativně náročné operace. [[Vyrovnávací paměť]] (''buffer'') je místo v [[Operační paměť|operační paměti]] vyhrazené pro dočasné uchování dat před jejich přesunem na jiné místo. Pouze pokud je vyrovnávací paměť prázdná, použije se běžný přístup. Proudy lze „naučit“ používat vyrovnávací paměť využitím návrhového vzoru [[dekorátor]]. Proud, který čte ze souboru a využívá vyrovnávací paměť je možno vytvořit následovně:
<pre>inputStream = new BufferedReader(new FileReader("vstup.txt"));</pre>
Řádek 108 ⟶ 103:
 
==== Vyprázdnění vyrovnávací paměti ====
 
Je dobrým zvykem vyprazdňovat vyrovnávací paměť (zapsat změněná data) na kritických místech. Tato operace uloží celý obsah vyrovnávací paměti na cíl proudu (soubor, zařízení atd.) Běžně se používá anglický výraz „''flush''“.
 
Řádek 122 ⟶ 116:
 
=== Datové proudy ===
 
Java obsahuje třídy pro pohodlné čtení a zápis primitivních [[datový typ|datových typů]] a typu <tt>''String''</tt>. Nejrozšířenější třídy jsou <tt>''DataInputStream''</tt> a <tt>''DataOutputStream''</tt>. <tt>''String''</tt> je ukládán v kódování [[UTF-8]]. Údaje takto uložené např. do souboru nejsou uživatelsky přívětivé a s výjimkou řetězců čitelné. Metody pro čtení jsou <tt>''read[[Desetinná čárka|Double]]''</tt>, <tt>''read[[číslo|Int]]''</tt>, <tt>''readUTF''</tt>. Obdobně metody pro zápis mají předponu <tt>''write''</tt>.
 
=== Objektové proudy ===
 
Většina standardních tříd implementuje rozhraní <tt>''Serializable''</tt> (serializovatelný), které je nezbytné pro jejich podporu [[Objekt (informatika)|objektovými]] proudy. Objektové proudy rozšiřují datové proudy, ''takže objektové proudy umí pracovat i s primitivními datovými typy''. Nové metody jsou <tt>''readObject''</tt> a <tt>''writeObject''</tt>. Pokud metoda <tt>''readObject''</tt> vrátí jiný než očekávaný objekt, vyhodí výjimku typu <tt>''ClassNotFoundException''</tt>.
 
Řádek 132 ⟶ 124:
 
== Odkazy ==
=== Reference ===
<references />
 
=== Literatura ===
* [[Rudolf Pecinovský|Pecinovský, Rudolf]]. ''Návrhové vzory''. [[Brno]] : [[Computer Press|COMPUTER PRESS]], 2007. 978-80-251-1582-4.
 
=== Reference ===
<references />
 
[[Kategorie:Datové struktury]]