• Nie Znaleziono Wyników

Pojęcie strumienia

N/A
N/A
Protected

Academic year: 2021

Share "Pojęcie strumienia "

Copied!
18
0
0

Pełen tekst

(1)

Biblioteki wejścia/wyjścia

Strumienie we/wy (I/O)

(2)

Pojęcie strumienia

• Strumień reprezentuje źródło lub odbiorcę danych (obiekt zdolny odbierać lub

produkować dane).

• Strumień ukrywa szczegóły związane z

rzeczywistymi operacjami wykonywanymi na danych w urządzeniach we/wy.

• Hierarchię klas biblioteki we/wy moŜna podzielić ze względu na kierunek

przepływu danych (wejście i wyjście) oraz na elementarne jednostki danych

(3)

Strumienie:

• bajtowe

• InputStream

• OutputStream

• znakowe

• Reader

• Writer

Strumienie bajtów stosuje się do danych binarnych (obraz, dźwięk), strumienie znakowe do sformatowanych danych

liczbowych i oczywiście tekstu. Preferować znakowe (Unicode, efektywniejsze)

(4)

Unicode (UCS)

• Reprezentacja 2-bajtowa

• MoŜliwość prezentacji, wymiany i

przetwarzania tekstów w róŜnych językach

• Około 50 000 znaków

• www.unicode.org

• 127 pierwszych znaków jest zgodnych z ASCII

• 256 pierwszych –ISO 8859-1

(5)

UTF-8

• Pewne sekwencje bajtów posiadają

specjalne znaczenie w róŜnych systemach operacyjnych. Unicode moŜe być

niebezpieczny!

• UTF (UCS Transformation Format)

• UTF-8 : 1 bajt dla ASCII,2 bajty dla znaków 8-bitowych i 3 bajty dla pozostałych

(6)

Hierarchia klas strumieniowych obejmuje tzw. klasy przedmiotowe to jest związane z konkretnym źródłem lub odbiorcą danych (tablica, łańcuch znaków, plik,) potok...)* oraz klasy przetwarzające (dekoracyjne), których zadanie polega na dostarczeniu dodatkowych uŜytecznych własności (nazywane teŜ filtrami).

Przykładem klasy dekoracyjnej jest DataInputStream umoŜliwiająca odczyt ze strumienia danych wszystkich podstawowych typów (readByte(), readFloat() ...) i

stringów. „Odwrotne” usługi oferuje DataOutputStream.

* Nazywane równieŜ strumieniami ujścia danych

Klasy przedmiotowe i przetwarzające

(7)

Typy strumieni wejściowych

Interfejs dla klas dekoracyjnych FilterInputStream

Z potoku PipedInputStream

Z pliku FileInputStream

Ze String-u StringBufferInputStream

Z bufora w pamięci.

ByteArrayInputStream

(8)

Typy strumieni wyjściowych

Interfejs dla klas dekoracyjnych FilterOutputStream

Do potoku PipedOutputStream

Do pliku FileOutputStream

Uwaga! Nie ma!

String jest niezmienny

>>StringBufferOutputStream<<

Do bufora w pamięci.

ByteArrayOutputStream

(9)

Wejściowe klasy „dekoracyjne”

dekompresja InflaterInputStream

Pozwalają na

„zwracanie”

odczytanego znaku PushbackInputStream

PushbackReader

Zapewniają numerację wierszy

LineNumberInputStream LineNumberReader

Zapewniają buforowanie BufferedInputStream

BufferedReader

Pozwalają na

odczytywanie typów prostych.

DataInputStream

(10)

Wyjściowe klasy „dekoracyjne”

kompresja DeflaterOutputStream

Do wypisywania typów prostych w czytelny sposób)

PrintStream PrintWriter

Zapewniają buforowanie BufferedOutputStream

BufferedWriter

Pozwala na zapisywanie typów prostych.

writeFloat() ...

DataOutputStream

(11)

Łańcuchy strumieni

• Strumienie zwiększają swoje moŜliwości

gdy wyjście jednego strumienia połączymy do wejścia innego tworząc łańcuch.

(12)

Przykład

File f = new File („phrases.utf”) ; FileReader r = new FileReader(f);

BufferedReader in = new BufferedReader(r);

String line = in.readLine() ; //unexpected result!

// System.getProperty(„file.encoding”) ;

(13)

Readers & Writers

Z uwagi na operowanie kodami Unicode

(internacjonalizacja) biblioteki we/wy w języku Java uległy w wersji 1.1 gruntownej modyfikacji (rozbudowie)

Są sytuacje gdy w programie uŜywa się zarówno klas bajtowych jak i znakowych wówczas

poŜyteczne mogą być klasy konwerujące:

InputStream InputStreamReader Reader

OutputStream  OutputStreamWriter Writer

(14)

Przykład again

File f = new File („phrases.utf”) ;

FileInputStream is = new FileInputStream(f);

InputStreamReader in =

new InputStreamReader (is, „UTF8”);

BufferedReader in = new BufferedReader(in);

String line = in.readLine() ; // is ok

(15)

„Odpowiedniki znakowe” klas przedmiotowych

PipedWriter PipedOutputStream

PipedReader PipedInputStream

CharArrayWriter ByteArrayOutputStream

CharArrayReader ByteArrayInputStream

StringWriter Brak odpowiednika

StringReader StringBufferInputStream

FileWriter FileOutputStream

FileReader FileInputStream

Writer OutputStream

Reader InputStream

(16)

Odpowiedniki znakowe” klas dekoracyjnych

PushBackReader PushBackInputStream

StreamTokenizer(Reader) StreamTokenizer

LineNumberReader LineNumberInputStream

PrintWriter PrintStream

DataInputStream ! DataInputStream

BufferedWriter BufferedOutputStream

BufferedReader BufferedInputStream

FilterWriter FilterOutputStream

FilterReader FilterInputStream

(17)

RandomAccessFile

• Pliki zbudowane z rekordów o znanej

długości, do których uzyskuje się dostęp

przez zmianę połoŜenia wskaźnika (seek()) „obsługiwane” są przez klasę

RandomAccessFile

(18)

Cytaty

Powiązane dokumenty

Wartości tych rozbieżności określono za pomocą symulacji wybranych procesów manipulowania: pozycjonowania obiektów układem przeciwbieżnych pól sił tarcia (rys. 3.29)

Rezultat działania polecenia ps -u (procesy użytkownika trafi do pliku o nazwie procesy.txt, jeśli wcześniej nie istniał plik o takiej samej nazwie, to zostanie utworzony,

Recykling surowcowy stano- wi rozwiązanie nie tylko dla tworzyw „czystych”, ale także zmie- szanych, wieloskładnikowych oraz dla zmieszanych odpadów komunalnych

-Składnia HTML zdefiniowana jest przy użyciu środków definiowania struktury dokumentów SGML (istnieje definicja HTML w postaci

-Składnia HTML zdefiniowana jest przy użyciu środków definiowania struktury dokumentów SGML (istnieje definicja HTML w postaci

-Składnia HTML zdefiniowana jest przy użyciu środków definiowania struktury dokumentów SGML (istnieje definicja HTML w postaci

 znak „&gt;” umożliwia przekierowanie strumienia danych ze standardowego wyjścia do pliku; jeżeli plik istnieje, to jego poprzednia zawartość zostaje usunięta, np5. ls

Wtedy nie ma problemu z przecinkiem jako separatorem (czy separator dziesiętny czy separator