Programowanie obiektowe

Podobne dokumenty
Przygotował: Jacek Sroka 1. Java SE. Strumienie

Strumienie i serializacja

Kurs programowania. Wykład 10. Wojciech Macyna. 05 maja 2016

Język JAVA podstawy. Wykład 6, część 2. Jacek Rumiński. Politechnika Gdańska, Inżynieria Biomedyczna

Biblioteki wejścia/wyjścia. Strumienie we/wy (I/O)

Podstawy i języki programowania

JAVA. Strumienie wejścia i wyjścia. Pliki - zapis i odczyt

Java niezbędnik programisty spotkanie nr 11. Importy statyczne, wejście/wyjście, wyrażenia regularne, serializacja

Wykład 4: Wejście/wyjście: strumienie Java

Wykład 10: Wejście i Wyjście

STRUMIENIE TEKSTOWE WEJŚCIOWE WPROWADZANIE DANYCH STRUMIENIE BAJTOWE, STRUMIENIE TEKSTOWE

1 Klasa File. 2 Writer. Programowanie w j zyku Java - Adam Krechowicz. Klasa File zapewnia podstawowe operacje na plikach

STRUMIENIE DANYCH, SERIALIZACJA OBIEKTÓW

dr Krzysztof Podlaski

Podstawy otwartych języków programowania Wyjątki i strumienie I/O

Programowanie obiektowe

Wstęp do Java. Operacje Wejścia-Wyjścia Programowanie Wielowątkowe. dr Krzysztof Podlaski. Wydział Fizyki i Informatyki Stosowanej

JAVA I SIECI. MATERIAŁY:

Programowanie obiektowe

Rozdział 7 Strumienie, operacje wejścia-wyjścia

Programowanie Obiektowe (Java)

Inynieria oprogramowania Lecture XXX. Java TM cz IV: IO. Bartosz Walter

Strumienie, pliki. Sortowanie. Wyjątki.

KOMUNIKACJA MIĘDZYPROCESOWA O B S Ł U G A WEJŚCIA/WYJŚCIA

K O M U N I K A C J A MIĘDZYPROCESOWA O B S Ł U G A WEJŚCIA/WYJŚCIA

Programowanie obiektowe

Język JAVA podstawy. wykład 2, część 1. Jacek Rumiński. Politechnika Gdańska, Inżynieria Biomedyczna

Java Zadanie 1. Aby poprawnie uruchomić aplikację desktopową, należy zaimplementować główną metodę zapewniającą punkt wejścia do programu.

Wprowadzanie danych z klawiatury. Wyjątki związane z wprowadzaniem danych, przekroczeniem rozmiaru tablicy, dzieleniem przez zero itd.

Programowanie w języku Java WYKŁAD

Podstawy programowania obiektowego

Komunikacja z użyciem gniazd aplikacje klient-serwer

Języki i metody programowania Java INF302W Wykład 3 (część 1)

Język JAVA podstawy. Wykład 6, część 1. Jacek Rumiński. Politechnika Gdańska, Inżynieria Biomedyczna

MATERIAŁY POMOCNICZE DO ĆWICZENIA 3 Klasy i obiekty; atrybuty i metody

Platformy Programistyczne Zagadnienia sieciowe i wątki

Bezpieczne uruchamianie apletów wg

Strumienie, pliki. Sortowanie. Wyjątki.

Programowanie obiektowe

Wykład 2. Strumienie tekstowe (wprowadzanie danych z klawiatury) i bajtowe, otwieranie strumieni poprzez sieć - obiekty URL

Aplikacje RMI. Budowa aplikacji rozproszonych. Część 2.

Wykład 2: Podstawy Języka

I/O (STRUMIENIE, PLIKI,...)

Programy typu klient serwer. Programowanie w środowisku rozproszonym. Wykład 5.

Zaawansowane techniki programowania C#

Java. język programowania obiektowego. Programowanie w językach wysokiego poziomu. mgr inż. Anna Wawszczak

Programowanie w Javie Lista nr 1. Wybieramy kategorię Java, a wśród Projektów Java Application i [NEXT]

Podstawy obiektowości

Dokumentacja do API Javy.

Laboratorium 03: Podstawowe konstrukcje w języku Java [2h]

Programowanie obiektowe zastosowanie języka Java SE

Języki i metody programowania Java INF302W Wykład 4

Podejście obiektowe. Tablice obiektów Przykład 1 metody i atrybuty statyczne oraz niestatyczne

Podstawy i języki programowania

Wykład 8: Obsługa Wyjątków

Informatyka I. Typy danych. Operacje arytmetyczne. Konwersje typów. Zmienne. Wczytywanie danych z klawiatury. dr hab. inż. Andrzej Czerepicki

Wykład 4: Klasy i Metody

Java: kilka brakujących szczegółów i uniwersalna nadklasa Object

Programowanie obiektowe

Języki i metody programowania Java. Wykład 2 (część 2)

MATERIAŁY POMOCNICZE DO ĆWICZENIA 1 Aplikacja w języku Java. Pakiety i biblioteki Javy. Kompilacja i wykonanie programu Javy

Biblioteka standardowa - operacje wejścia/wyjścia

Programowanie rozproszone w języku Java

Programowanie w języku Java - Wyjątki, obsługa wyjątków, generowanie wyjątków

Kurs programowania. Wykład 1. Wojciech Macyna. 3 marca 2016

Wielowątkowość. Programowanie w środowisku rozproszonym. Wykład 1.

Programowanie obiektowe. Literatura: Autor: dr inŝ. Zofia Kruczkiewicz

Wykład 4. Tablice. Pliki

Języki i Techniki Programowania II. Wykład 6. Wejście/Wyjście

Java - tablice, konstruktory, dziedziczenie i hermetyzacja

Java niezbędnik programisty spotkanie nr 3. Modyfikatory, jednostki kompilacji, tworzenie/inicjalizacja, odśmiecanie/ finalizacja...

Metody Metody, parametry, zwracanie wartości

Funkcje zawarte w bibliotece < io.h >

Programowanie proceduralne INP001210WL rok akademicki 2018/19 semestr letni. Wykład 6. Karol Tarnowski A-1 p.

Java. Zadania z programowania z przykładowymi rozwiązaniami

Wykład 6 Dziedziczenie cd., pliki

Ćwiczenie 9 - Zaawansowane metody programowania w sieci komputerowej

Programowanie w języku Java

Akademia ETI. Wprowadzenie do programowania w Javie PG Java User Group Przemysław Kulesza

Java: otwórz okienko. Programowanie w językach wysokiego poziomu. mgr inż. Anna Wawszczak

Wykład II. Programowanie II - semestr II Kierunek Informatyka. dr inż. Janusz Słupik. Wydział Matematyki Stosowanej Politechniki Śląskiej

Programowanie w Internecie. Java

Aplikacje w środowisku Java

Materiały do laboratorium I

Wstęp do programowania INP001213Wcl rok akademicki 2017/18 semestr zimowy. Wykład 12. Karol Tarnowski A-1 p.

Aplikacja wielowątkowa prosty komunikator

Podstawy tworzenia aplikacji z wykorzystaniem języka Java ME ćwiczenia 3

Przykłady interfejsu TCP i UDP w Javie

Języki i metody programowania Java INF302W Wykład 2 (część 1)

JAVA W SUPER EXPRESOWEJ PIGUŁCE

Wprowadzenie do języka Java

Funkcje zawarte w bibliotece < io.h >

Programowanie obiektowe

Wykład 2 Wybrane konstrukcje obiektowych języków programowania (1)

Praktyczne aspekty programowania w Javie wydajność programu w zakresie automatycznego zarządzania zasobami

Łukasz Przywarty Wrocław, r. Grupa: WT/N 11:15-14:00. Sprawozdanie z zajęć laboratoryjnych: OpenSSL - API

Programowanie obiektowe

SWING c.d. przydatne narzędzia: JFileChooser, JOptionPane. drag'n drop, menu kontekstowe.

Aplikacje Internetowe. Najprostsza aplikacja. Komponenty Javy. Podstawy języka Java

Multimedia JAVA. Historia

Transkrypt:

Przygotował: Jacek Sroka 1 Programowanie obiektowe Wykład 8 Strumienie

Przygotował: Jacek Sroka 2 Przypomnienie Reagowanie na sytuacje wyjątkowe Wyjątki nadzorowane i nienadzorowane Obsługa wyjątku try catch finally Rozwijanie stosu Składowe wyjątku Wsparcie ze strony kompilatora Zwalnianie zasobów Wyjątki a tworzenie i inicjalizacja Wyjątki a rozszerzanie Dobre praktyki

Przygotował: Jacek Sroka 3 Przykład wejścia w Javie import java.io.filereader; import java.io.ioexception; public class ZnakPoZnaku { public static void main(string[] args) throws IOException { // wersja dla Linuxa FileReader rd = new FileReader("/tmp/io_test.txt"); // wersja dla Windows // FileReader rd = new FileReader("c:\\io_test.txt"); try { int i; // Reader.read() zwraca wartość z przedziału 0 to 65535, // jeżeli odczyt się powiódł lub -1 jak nie while ((i = rd.read())!= -1) System.out.print((char) i); finally { rd.close();

Przygotował: Jacek Sroka 4 System wejścia/wyjścia Czemu to musi być rozległe Dane mogą pochodzić z różnych mediów: konsola, pliki, połączenia sieciowe, Różne sposoby obsługi: sekwencyjnie, ze swobodnym dostępem, buforowanie, znakowo/binarnie, znak po znaku/linia po linii,... Czasami konieczne dodatkowe przetwarzanie: liczenie sumy kontrolnej, kompresja, szyfrowanie, Wzorzec Dekorator Przykład: okienko z suwakiem Strumienie (ang. stream) InputStream, OutputStream, Reader, Writer Znakowe od Javy 1.1 Znakowe nie zastępują binarnych Łatwa konwersja z binarnych na znakowe (przydatna np. przy kompresji)

Przygotował: Jacek Sroka 5 Przykład konwersji import java.io.*; public class KonwersjaStrumieni { public static void main(string[] args) throws IOException { String napis = "Test strumieni.\nąćęłńóśźż\n"; ByteArrayOutputStream os = new ByteArrayOutputStream(); // OutputStream jest przekrztałcany na Writer Writer wr = new OutputStreamWriter(os); wr.write(napis); wr.close(); ByteArrayInputStream is = new ByteArrayInputStream(os.toByteArray()); // InputStream jest przekształcany na Reader Reader rd = new InputStreamReader(is); int i; while ((i = rd.read())!= -1) System.out.print((char) i); rd.close();

Przygotował: Jacek Sroka 6 Strumienie Standardowe strumienie są dla: plików, tablic bajtów/znaków, obiektów String, łączach (ang. pipe) Wiele innych obiektów pozwala otrzymać strumień: Socket, URL File{Input,OutputStream i File{Reader,Writer pozwalają odczytywać i zapisywać pliki dyskowe Nazwa pliku lub obiekt File jako parametr konstruktora Dla obiektów wyjściowych drugi parametr wskazuje czy dopisywać na końcu ByteArray{Input,OutputStream i CharArray{Reader,Writer bufor w pamięci oparty na tablicy odpowiednio bajtów lub znaków Dla ob. wejściowego przekazujemy tablicę Dla ob. wyjściowego początkowy rozmiar bufora

Przygotował: Jacek Sroka 7 Strumienie StringBufferInputStream (nie ma odpowiednika do zapisu i jest deprecated) String{Reader,Writer bufor w pamięci oparty na napisie String (implementacja posługuje się obiektem StringBuffer) Dla ob. wejściowego przekazujemy napis Dla ob. wyjściowego początkowy rozmiar bufora Piped{Input,OutputStream i Piped{Reader,Writer łącze do komunikacji między procesami Najpierw tworzymy obiekt jedne rodzaju (konstr. bezparametrowy) Potem przekazujemy konstruktorowi obiektu drugiego rodzaju Strumienie zostają połączone łączem

Przygotował: Jacek Sroka 8 Podstawowe operacje na danych read() następny bajt/znak lub -1 jak koniec strumienia read(byte[]) lub read(char[]) odczytuje dane do tablicy, zwraca liczbę odczytanych porcji (chyba że już koniec wtedy -1), blokuje się dopóki nie napotka końca read(byte[], int, int) lub read(char[], int, int) analogicznie wypełnia podtablicę write(byte) lub write(char) zapisuje jedną porcję danych Analogiczne wersje dla tablic i tablic z przedziałami Wersja znakowa może zapisywać napisy i ich wycinki Strumienie trzeba zamykać close()

Przygotował: Jacek Sroka 9 Kodowanie znaków W Javie znaki są wewnętrznie kodowane w Unicode 16bit Użycie bezparametrowych konstruktorów {Input,OutputStreamWriter skutkuje konwersją do dla domyślnego kodowania danej platformy oba konstruktory są przeciążone i można jawnie wskazać kodowanie Również File{Reader,Writer stosują domyślne kodowanie to tylko opakowanie na {Input,OutputStreamWriter

Przygotował: Jacek Sroka 10 Konkatenacja strumieni import java.io.*; public class KonkatenacjaStrumieni { public static void main(string[] args) throws IOException { String danedlabufora1 = "Dane dla bufora 1.\nąćęłńóśźż\n"; String danedlabufora2 = "Dane dla bufora 2.\nąćęłńóśźż\n"; // getbytes() zwraca tablicę bajtów repr. kolejne znaki napisu // w domyślnym dla danej platformy kodowaniu znaków // (są też wersje przeciążone) ByteArrayInputStream is1 = new ByteArrayInputStream(daneDlaBufora1.getBytes()); ByteArrayInputStream is2 = new ByteArrayInputStream(daneDlaBufora2.getBytes()); // jest też konstruktor przyjmujący Enumeration<? extends InputStream> SequenceInputStream seq = new SequenceInputStream(is1, is2); Reader rd = new InputStreamReader(seq); int i; while ((i = rd.read())!= -1) System.out.print((char) i);

Przygotował: Jacek Sroka 11 Wzorzec Dekorator

Przygotował: Jacek Sroka 12 Przykłady Dekoratorów Buffered{Input,OutpuStream i Buffered{Reader,Writer Dodaje buforowanie (istotne dla efektywności) Do natychmiastowego opróżnienia bufora służy flush() Zazwyczaj bufor jest opróżniany również przy close() PrintStream i PrintWriter Dodatkowe metody wypisujące dane w sposób czytelny dla człowieka w dwóch wersjach print() i println() Dla wygody klasy posiadają dodatkowe konstruktory, które zwalniają z konieczności otwierania samemu strumienia do pisania na pliku i dekorowania go buforowaniem Zalecana jest PrintWriter, gdyż zapisuje końce linii w sposób przyjęty na danej platformie Uwaga: metody nie przepuszczają IOException, trzeba używać metody checkerror() PushBackInputStream i PushBackReader Dodają metodę unread() pozwalającą odesłać z powrotem ostatnio odczytane dane Odesłane dane są zapamiętywane w buforze. Kolejne odczyty najpierw pobierają dane z bufora, a dopiero jak jest pusty ze strumienia Przydaje się podczas budowy kompilatora.

Przygotował: Jacek Sroka 13 Przykłady Dekoratorów c.d. LineNumberInputStream i LineNumberReader Dodają metodę getlinenumber(), która zwraca liczbę odczytanych do tej pory linii LineNumberInputStream jest oznaczona jako deprecated Data{Input,OutputStream (brak odpowiedników znakowych) Dodają nowe metod do przesyłania przez strumień wartości typów podstawowych oraz napisów w sposób niezależny od platformy Object{Input,OutputStream (brak odpowiedników znakowych) Dodają nowe metody pozwalające przesyłać przez strumień obiekty implementujące interfejs java.io.serializable

Przygotował: Jacek Sroka 14 Przykłady Dekoratorów c.d. Checked{Input,OutputStream (brak odpowiednika znakowego) Wylicza sumę kontrolną dla danych przesyłanych przez strumień Należą do pakietu java.util.zip GZIP{Input,OutputStream (brak odpowiedników znakowych) Dane przesyłane przez strumień są kompresowane przy pomocy prostego algorytmu GZIP. Należą do pakietu java.util.zip Zip{Input,OutputStream (brak odpowiedników znakowych) Dane przesyłane przez strumień są kompresowane przy pomocy algorytmu Zip Należą do pakietu java.util.zip Cipher{Input,OutputStream (brak odpowiedników znakowych) Dane przesyłane przez strumień są szyfrowane lub deszyfrowane przy pomocy obiektu Cipher Należą do pakietu java.crypto

Przygotował: Jacek Sroka 15 Filmik

Przygotował: Jacek Sroka 16 Standardowe we/wy Standardowe wejście System.in InputStream BufferedReader stin = new BufferedReader(new InputStreamReader(System.in)); Scanner in = new Scanner(System.in); Standardowe wyjście System.out PrintStream Standardowe wyjście błędu System.oerr PrintStream Programy można łączyć w potoki Przekierowanie setout(printstream), setin(inputstream) i seterr(printstream)

Przygotował: Jacek Sroka 17 Przykład kompresja public class KompresjaGZIP { public static void main(string[] args) throws IOException { String nazwapliku = "/tmp/io_test.gzip"; BufferedOutputStream os = new BufferedOutputStream( new GZIPOutputStream( new FileOutputStream(nazwaPliku))); PrintWriter pw = new PrintWriter( new OutputStreamWriter(os)); pw.write("kompresja w Javie jest prosta"); pw.close(); // dekompresja BufferedInputStream is = new BufferedInputStream( new GZIPInputStream( new FileInputStream(nazwaPliku))); BufferedReader br = new BufferedReader( new InputStreamReader(is)); String s; while ( (s = br.readline())!= null ) System.out.println(s); br.close();

Przygotował: Jacek Sroka 18 Przykład kompresja ZIP public class KompresjaZip { public static void main(string[] args) throws IOException { String nazwapliku = "/tmp/io_test.zip"; int x; ZipOutputStream zos = new ZipOutputStream(...); for (int i = 1; i < args.length; i++) { System.out.println("Zapisywanie " + args[i]); BufferedInputStream in = new BufferedInputStream(new FileInputStream(args[0]+args[i])); zos.putnextentry(new ZipEntry(args[i])); while ( (x = in.read())!= -1 ) zos.write(x); in.close(); zos.close(); ZipInputStream zis = new ZipInputStream(...); ZipEntry ze; while ( (ze = zis.getnextentry())!= null ) { System.out.println(); System.out.println("Odczytywanie: " + ze); while ( (x = zis.read())!= -1 ) System.out.write(x); System.out.flush(); zis.close(); //np. java KompresjaZip /home/mójużytkownik/ a.txt b.txt podkat\c.txt podkat\d.txt

Przygotował: Jacek Sroka 19 NIO New I/O = Non-blocking I/O = NIO