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



Podobne dokumenty
STRUMIENIE DANYCH, SERIALIZACJA OBIEKTÓW

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

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

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

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

Strumienie i serializacja

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

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

Podstawy i języki programowania

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

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

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

Programowanie obiektowe

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

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

Programowanie obiektowe

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

Strumienie, pliki. Sortowanie. Wyjątki.

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

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

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

Wykład 2: Podstawy Języka

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

Platformy Programistyczne Zagadnienia sieciowe i wątki

dr Krzysztof Podlaski

Programowanie Obiektowe (Java)

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

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

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

Obiektowe programowanie rozproszone Java RMI. Krzysztof Banaś Systemy rozproszone 1

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

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

Kurs programowania. Wykład 2. Wojciech Macyna. 17 marca 2016

Programowanie obiektowe

Przygotował: Jacek Sroka 1. Java SE. Strumienie

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

Programowanie obiektowe

Multimedia JAVA. Historia

Wykład 6 Dziedziczenie cd., pliki

Programowanie w Internecie. Java

Programowanie obiektowe

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

Obszar statyczny dane dostępne w dowolnym momencie podczas pracy programu (wprowadzone słowem kluczowym static),

Wątki. Definiowanie wątków jako klas potomnych Thread. Nadpisanie metody run().

Materiały do laboratorium I

Throwable. Wyjatek_1(int x_) { x = x_; } int podaj_x()

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

Interfejsy. Programowanie obiektowe. Paweł Rogaliński Instytut Informatyki, Automatyki i Robotyki Politechniki Wrocławskiej

Wykład 4: Klasy i Metody

Strumienie tekstowe (wprowadzanie danych z klawiatury) i bajtowe, otwieranie strumieni przez sieć - obiekty URL

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

Programowanie obiektowe

JAVA I SIECI. MATERIAŁY:

Bezpieczne uruchamianie apletów wg

Aplikacja wielowątkowa prosty komunikator

Java - tablice, konstruktory, dziedziczenie i hermetyzacja

Java. Programowanie Obiektowe Mateusz Cicheński

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

Zaawansowane techniki programowania C#

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

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

Strumienie, pliki. Sortowanie. Wyjątki.

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

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

Pliki. Informacje ogólne. Obsługa plików w języku C

Podstawy i języki programowania

Funkcje zawarte w bibliotece < io.h >

Programowanie obiektowe

Dokumentacja do API Javy.

WYJĄTKI. Jest ona jednak czasochłonna i prowadzi do duŝego zapotrzebowania na zasoby systemu.

Funkcje zawarte w bibliotece < io.h >

Podstawy Języka Java

JAVA W SUPER EXPRESOWEJ PIGUŁCE

Java. Wykład. Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ

WSNHiD, Programowanie 2, Lab. 3. Trwałość danych

Biblioteka standardowa - operacje wejścia/wyjścia

Wykład 5 Okna MDI i SDI, dziedziczenie

Klasy. dr Anna Łazińska, WMiI UŁ Podstawy języka Java 1 / 13

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

Aplikacja wielow tkowa prosty komunikator

Podstawy programowania obiektowego

Proxy (pełnomocnik) Cel: Zastosowanie: Dostarczyć zamiennik pewnego obiektu, pozwalający kontrolować dostęp do niego.

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

Platformy Programistyczne Podstawy języka Java

Metody zawarte w klasie File: boolean createnewfile() tworzy nowy, pusty plik, ale tylko jeśli on wcześniej nie istniał. boolean delete() usuwa dany

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

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

Pliki. Informacje ogólne. Obsługa plików w języku C

Katalog książek cz. 2

System obsªugi wej±cia i wyj±cia.

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

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

akademia androida Składowanie danych część VI

sieć 4) Mechanizm RMI jest zazwyczaj wykorzystywany w rozwiązaniach typu klient-serwer.

Programowanie w C++ Wykład 9. Katarzyna Grzelak. 14 maja K.Grzelak (Wykład 9) Programowanie w C++ 1 / 30

UML a kod w C++ i Javie. Przypadki użycia. Diagramy klas. Klasy użytkowników i wykorzystywane funkcje. Związki pomiędzy przypadkami.

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

Programowanie obiektowe zastosowanie języka Java SE

Języki Programowania II Wykład 3. Java podstawy. Przypomnienie

Programowanie w języku Java WYKŁAD

Transkrypt:

Język JAVA podstawy Wykład 6, część 1 Jacek Rumiński 1

Język JAVA podstawy Plan wykładu: 1. Wprowadzenie do operacji wejścia/wyjścia: strumienie 2. Podstawowe klasy strumieni i InputStream/OutputStream t 3. Obsługa strumieni znaków 4. Operacje na plikach w systemie plików 5. Specjalne zastosowania strumieni Jacek Rumiński 2

Język JAVA strumienie Wprowadzenie do operacji wejścia/wyjścia: strumienie Dlaczego nazwa strumień (stream)? Strumień oznacza sekwencję bajtów, które są transportowane z jednego miejsca do drugiego. Jest więc bardzo wygodna abstrakcja (cokolwiek się przemieszcza, zawsze są to bajty). WY strumień wody WE Jacek Rumiński 3

Język JAVA strumienie Wprowadzenie do operacji wejścia/wyjścia: strumienie Podstawowe typu strumieni to te związane z operacjami wprowadzania danych do programu (operacje wejścia) i z operacjami wyprowadzania danych poza program (operacje wyjścia). W Javie do obsługi ł operacji wejścia stworzono klasę InputStream, natomiast t dla obsługi operacji wyjścia stworzono klasę OutputStream. Obieklasysą abstrakcyjne (nie można bezpośrednio utworzyć obiektów tych klas). Utworzenie strumienia związane jest z typem obszaru (urządzenia), z/do którego sekwencja danych przepływa oraz z rodzajem (typem) przenoszonych danych. Podstawowe obszary (urządzenia) to np. pamięć operacyjna, dyski (pliki), sieć, drukarka, ekran, itp. Przesyłane mogą być dane dowolnych typów metody operacji na strumieni muszą wiedzieć jak "zapakować "dane do postaci sekwencji bajtów i jak je "odpakować". Jacek Rumiński 4

Język JAVA strumienie odpakowanie zapakowanie Jacek Rumiński bajty reprezentujące dane źródłowe w innej formie 5

Język JAVA strumienie Wprowadzenie do operacji wejścia/wyjścia: strumienie W JDK 1.1 wprowadzono klasy strumieni dedykowane obsłudze ciągów znaków (String). Klasy te stanowią analogię do klas InputStream oraz OutputStream. tst Wprowadzenie dodatkowych d hklas obsługujących sekwencje łańcuchów znaków miało na celu ujednolicenie pracy w środowisku Javy z tekstem zapisywanym kodowanym w Unicodzie (2 bajty na znak). Dodatkowe, oddzielne klasy strumieni to klasa StreamTokenizer, dzieląca strumień tekstowy na leksemy oraz klasa RandomAccessFile obsługująca pliki zawierające rekordy o znanych rozmiarach, tak że można dowolnie poruszać się w obrębie rekordów i je modyfikować. Jacek Rumiński 6

Język JAVA strumienie Wprowadzenie do operacji wejścia/wyjścia: strumienie Ważnym zagadnieniem związanym ze strumieniami jest możliwość zapisu obiektu jako sekwencji bajtów (przesłanie obiektu, zapis do pliku). Efekt ten jest uzyskiwany poprzez zastosowanie mechanizmu serializacji (obiekt z pamięci ido postaci, w której można ż go przesyłać) ł i wykorzystania klas ObjectInputStream oraz ObjectOutputStream. Wszystkie omawiane klasy obsługujące różne typy strumieni zdefiniowane są w pakiecie java.io. Począwszy od wersji JDK 1.4 wprowadzono nowy pakiet java.nio. Pakiet ten dostarcza szereg klas obsługujących przesyłanie danych w formie kanałów transmisyjnych (Channels). Zasadnicza różnica polega na tym, że dane transmitowane są w formie bloków zamiast sekwencji. Wprowadzono specjalne klasy buforów (ByteBuffer i pochodne) obsługujące bloki wymienianych danych. Jacek Rumiński 7

Język JAVA podstawy Plan wykładu: 1. Wprowadzenie do operacji wejścia/wyjścia: strumienie 2. Podstawowe klasy strumieni i InputStream/OutputStream t 3. Obsługa strumieni znaków 4. Operacje na plikach w systemie plików 5. Specjalne zastosowania strumieni Jacek Rumiński 8

Język JAVA Input/Output Stream Podstawowe klasy strumieni InputStream/OutputStream WY strumień wody strumień bajtów sekwencja bajtów WE OutputStream InputStream Jacek Rumiński 9

Język JAVA Input/Output Stream Podstawowe klasy strumieni InputStream Klasa abstrakcyjną zawierająca podstawowe metody odczytu i kontroli bajtów ze strumienia. Obiekt tej klasy można ż uzyskać ć poprzez odwołanie ł się do standardowego wejścia zainicjowanego zawsze w polu in klasy System,czyliSystem.in. System.in. Inne możliwości uzyskania obiektu klasy rzutowanej na InputStream to wywołanie metod zwracających referencję do obiektu tego typu np.: metoda getinputstream() zdefiniowana w klasie Socket (protokół TCP/IP). Jedyną metodą abstrakcyjną (czyniącą z tej klasy klasę abstrakcyjną) jest metoda read() oznaczająca czytanie kolejnego bajtu ze strumienia wejścia. Jacek Rumiński 10

Język JAVA Input/Output Stream Podstawowe klasy strumieni InputStream Pozostałe metody (poza read()) umożliwiają: odczyt bajtów do zdefiniowanej tablicy: int read(byte b[]); i nt read(byte b[], int offset, int tl length); pominięcie określonej liczby bajtów w odczycie: long skip(long n); kontrolę stanu strumienia (czy są dane): int available(); tworzenie markerów: boolean marksupported(); kontrola czy tworzenie markerów jest możliwe synchronized void mark(int readlimit); synchronized void reset() zamknięcie strumienia: void close(). Jacek Rumiński 11

Język JAVA Input/Output Stream Podstawowe klasy strumieni InputStream Wybrane klasy dziedziczące po klasie InputStream to: ByteArrayInputStream strumień o źródle w tablicy bajtów (pamięć, wygodny przy operacjach wymagających wysokiej wydajności, ś np. kodowanie), FileInputStream strumień umożliwiający odczyt z pliku, FilterInputStream strumień umożliwiający operacje na bajtach w sekwencji poprzez klasy dziedziczące, np. DataInputStream, która umożliwia programowi odczyt danych zgodnie z podstawowymi typami danych, char, int, long, double, a nie byte[]. ObjectInputStream odtworzenie obiektu (readobject())zjegozapisu jego zapisu w formie sekwencji bajtów (z pliku, z sieci, itd.) dokonuje rekonstrukcji obiektu z sekwencji bajtów (po serializacji), Jacek Rumiński 12

Język JAVA Input/Output Stream Podstawowe klasy strumieni OutputStream W podobny sposób, niemniej dotyczący obsługi wyjścia, definiowane są klasy dziedziczące z klasy OutputStream. Klasa ta jest również klasą abstrakcyjną z jedyną abstrakcyjną metodą write() zapisująca kolejny bajt jtdo strumienia. i Podstawowe metody tej klasy to: void close() zamknięcie strumienia, void flush() przesuwa buforowane dane do strumienia, void write(byte[] b, int off, int len), zapisuje len bajtów z tablicy b począwszy od off, do strumienia wyjścia. void write(byte[] b) zapisują dane z tablicy b do strumienia wyjścia. Klasy dziedziczące jak dla InputStream,tylkoczłon tylko nazwy "Input", należy zamienić na "Output", np. FileOutputStream. Jacek Rumiński 13

Język JAVA Input/Output Stream Podstawowe klasy strumieni OutputStream Interesującą klasą dziedziczącą po klasie FilterOutputStream (a ta po OutputStream) jest klasa PrintStream. Właściwie znamy już tę klasę. Pole System.out jest obiektem tej klasy, a najczęściej ś j używana ż przez nas metoda to System.out.println(), t tl czyli metoda println() klasy PrintStream. Ponadto klasa ta ma m.in. metody: print(); wysłanie wartości danego typu podstawowego oraz wartości ciągu znaków dla klasy String, println(); jak dla print(), tylko dodatkowo przesłany znak nowej linii (na końcu) printf(); formatowanie przesyłanego ciągu znaków jak w języku "C", np.: printf("jacek ma %d lat, co w kodzie szesnastkowym wynosi %x.", 38, 38); Wynik: "Jacek ma 38 lat, co w kodzie szesnastkowym wynosi 26." Jacek Rumiński 14

Język JAVA EchoJedi.java import java.io.*; public class EchoJedi{ public static void main(string args[]){ byte b[] = new byte[100]; try{ //wczytaj dane ze standardowego wejścia (klawiatura) do tablicy System.in.read(b); /* System.in to tworzony przez Maszynę Wirtualną obiekt jakiejś * klasy, rzutowany na typ klasy InputStream (upcasting). */ //wyślij bajty z tablicy do standardowego wyjścia (ekran) System.out.write(b); /* System.out to tworzony przez Maszynę Wirtualną obiekt klasy * PrintStream, która dziecziczy po OutputStream. */ System.out.flush(); /* jeśli strumień jest buforowany (operacje na bloku danych, celem * zwiększenia wydajności dane zapisywane są do bloku; jeśli blok *j jest pełny, ł cały ł blok wysyłany ł jest do strumienia) i to wymuś ś * przesłanie danych z bloku do strumienia.*/ } catch (IOException ioe){ //funkcje odczyty mogą generować wyjątki System.out.println("Błąd t tl wejścia wyjścia: i "+ioe); }//koniec try }//koniec main() }//koniec public class EchoJedi Jacek Rumiński 15

Język JAVA TransferJedi.java import java.io.*; public class TransferJedi{ static String nazwapliku="test.dat"; public static void main(string args[]){ byte b[] = new byte[100]; double liczba; try{ System.out.println("Wprowadź liczbę i naciśnij ENTER:"); System.in.read(b); liczba=double.parsedouble(new String(b));//bajty na ciąg znaków; ciąg na liczbę System.out.println("LICZBA wprowadzona:\t\t "+liczba); //otwórz/stwórz plik o nazwie "test.dat", otwarty strumień filtruj DataOutputStream dos=new DataOutputStream(new FileOutputStream(nazwaPliku)); dos.writedouble(liczba); dos.close(); //filtruj formatując bajty jako liczby double //otwórz plik, otwarty strumień filtruj DataInputStream dis=new DataInputStream(new FileInputStream(nazwaPliku)); liczba=dis.readdouble(); dis.close(); //filtruj czytając bajty jako liczbę double System.out.println("LICZBA t tl odczytana z pliku:\t "+liczba); } catch (NumberFormatException nfe){//wyjątek, ktoś podał ciąg znaków inny niż liczba System.out.println("Błędnie podana wartość (format) liczby rzeczywistej."); } catch (IOException ioe){ //funkcje odczytu mogą generować wyjątki System.out.println("Błąd wejścia wyjścia: "+ioe); }//koniec try }//koniec main() }//koniec public class TransferJedi Jacek Rumiński 16

Język JAVA MisjaJedi.java import java.io.*; class PlanyJedi implements Serializable{ private String tajnehaslo="mojehaslo"; public String pobierzplany(string haslo){ if(haslo.equals(tajnehaslo)){ ( return "Takie sobie tajne plany..."; }else return "Brak planow"; }//koniec pobierzplany() }//koniec class PlanyJedi Jacek Rumiński 17

Język JAVA MisjaJedi.java public class MisjaJedi{ static String nazwapliku="plany.dat"; public static void main(string args[]){ byte b[] = new byte[100]; try{ //otwórz/stwórz plik o nazwie "plany.dat", otwarty strumień filtruj ObjectOutputStream oos=new ObjectOutputStream(new FileOutputStream(nazwaPliku)); oos.writeobject(new PlanyJedi()); oos.close(); //zapisz obiekt klasy PlanyJedi i zamknij //otwórz plik, otwarty strumień filtruj ObjectInputStream ois=new ObjectInputStream(new FileInputStream(nazwaPliku)); PlanyJedi pj=(planyjedi)ois.readobject(); ois.close();//z pliku czytamy obiekt! System.out.println("Podaj hasło:"); System.in.read(b); String haslo=new String(b); haslo=haslo.trim();//usuń puste znaki (zerowe bajty z b) String plany=pj.pobierzplany(haslo); System.out.printf("ODCZYTANE t tf("odczytane PLANY: %s",plany); } catch (Exception ioe){ //funkcje odczytu mogą generować wyjątki System.out.println("Błąd wejścia wyjścia: "+ioe); }//koniec try }//koniec main() }//koniec public class MisjaJedi Jacek Rumiński 18

Język JAVA podstawy Plan wykładu: 1. Wprowadzenie do operacji wejścia/wyjścia: strumienie 2. Podstawowe klasy strumieni i InputStream/OutputStream t 3. Obsługa strumieni znaków 4. Operacje na plikach w systemie plików 5. Specjalne zastosowania strumieni Jacek Rumiński 19