STRUMIENIE DANYCH, SERIALIZACJA OBIEKTÓW

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

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

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

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

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

Wykład 7 Tworzenie łącz w apletach, wątki, serializacja obiektów, gniazda

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

Bezpieczne uruchamianie apletów wg

StringTokenizer bon = new StringTokenizer(bufor.readLine());

Strumienie i serializacja

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

Programowanie obiektowe

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

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

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

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

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

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

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

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

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

Programowanie obiektowe

Obiekty sieciowe - gniazda Komputery w sieci Internet komunikują się ze sobą poprzez:

Programowanie sieciowe

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

Podstawy i języki programowania

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

Aplikacja wielowątkowa prosty komunikator

Programowanie Obiektowe (Java)

Programowane refleksyjne i serializacja

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

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

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

Pętle while, for, do while, instrukcje break, continue, switch 1. Pętle

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

Strumienie, pliki. Sortowanie. Wyjątki.

Wykład 2: Podstawy Języka

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

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

Aplikacja wielow tkowa prosty komunikator

JAVA W SUPER EXPRESOWEJ PIGUŁCE

Java. Programowanie Obiektowe Mateusz Cicheński

Programowanie obiektowe

Zofia Kruczkiewicz, Programowanie obiektowe - java, wykład 2 1

Platformy Programistyczne Zagadnienia sieciowe i wątki

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

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

Protokół JDBC współpraca z relacyjnymi bazami danych lab4. Dr inż. Zofia Kruczkiewicz Programowanie aplikacji internetowych

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

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

Sposoby tworzenia projektu zawierającego aplet w środowisku NetBeans. Metody zabezpieczenia komputera użytkownika przed działaniem apletu.

Strumienie, pliki. Sortowanie. Wyjątki.

Programowanie w języku Java WYKŁAD

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

Schemat dla UDP. = możliwe zablokowanie aplikacji KLIENT SERWER. s=socket(...) bind(s,...) recvfrom(s,...) sendto(s,...) recvfrom(s,...

Protokół JDBC współpraca z relacyjnymi bazami danych lab3

Wprowadzenie do języka Java

Programowanie obiektowe

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

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

Podejście obiektowe. Tablice (1) obiektów

dziedziczenie - po nazwie klasy wystąpią słowa: extends nazwa_superklasy

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

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

Funkcje zawarte w bibliotece < io.h >

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

Programowanie w Internecie. Java

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

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

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

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

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

Funkcje zawarte w bibliotece < io.h >

Java programowanie w sieci. java.net RMI

Java Programowanie Obiektowe Ćwiczenie 1- wprowadzenie

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

Programowanie obiektowe

Programowanie obiektowe

PODEJŚCIE OBIEKTOWE. Przykład 1 metody i atrybuty statyczne

Protokół JDBC współpraca z relacyjnymi bazami danych

Programowanie obiektowe

Java: Graficzne interfejsy użytkownika

Wykład 4. Tablice. Pliki

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

Programowanie rozproszone w języku Java

Przygotował: Jacek Sroka 1. Java SE. Strumienie

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

Algorytmy z powrotami. Algorytm minimax

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

Podstawy programowania obiektowego

Programowanie urządzeń mobilnych. dr inż. Andrzej Grosser na podstawie wykładu dr inż. Juliusza Mikody

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

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

Materiały pomocnicze do wykładu 3 - Elementy języka Java

Operacje wejścia/wyjścia (odsłona druga) - pliki

Podstawy otwartych języków programowania Przechowywanie danych

Programowanie i projektowanie obiektowe

Zdalne wywołanie metod - koncepcja. Oprogramowanie systemów równoległych i rozproszonych Wykład 7. Rodzaje obiektów. Odniesienie do obiektu

Wykorzystywanie parsera DOM w programach Java i PL/SQL

Transkrypt:

STRUMIENIE DANYCH, SERIALIZACJA OBIEKTÓW 1. Procedura korzystania ze strumieni danych Aby utworzyć plik: 1) Należy utworzyć obiekt (np. typu FileOutputStream), powiązany ze plikiem danych binarnych (np. "plik3.dat"); FileOutputStream plik = new FileOutputStream("plik3.dat"); 2) W celu buforowania bajtów pochodzących z obiektu powiązanego ze źródłem danych np. typu FileOutputStream należy utworzyć obiekt klasy BufferedOutputStream BufferedOutputStream bufor = new BufferedOutputStream( plik ); 3) W celu reprezentowania danych typu boolean, byte, double, float long, short należy utworzyć strumień danych typu DataOutputStream powiązanego z obiektem buforującym typu BufferedOutputStream DataOutputStream dana= new DataOutputStream (bufor); Dalej podano metody strumienia danych do zapisu danych do pliku: 4) Pojedyncze bajty mogą być zapisywane do pliku za pomocą metody: void write(int b) 5) Całe ciągi bajtów mogą być zapisywane do pliku za pomocą metody: void write(byte[] cbuf, int off, int len) metoda, która czyta z tablicy cbuf od indeksu off liczbę len bajtów i zapisuje do pliku 6) void writeboolean(boolean v) zapisuje do pliku 1-bajtową wartość 7) void writebyte(int v) zapisuje do pliku 1-bajtową wartość 8) void writechar(int v) zapisuje znak jako 2-bajtową wartość starszy bajt jako pierwszy (Unicode) 9) void writedouble(double v) zapisuje 8-bajtową wartość do pliku 10) void writefloat(float v) zapisuje 4-bajtową wartość do pliku 11) void writeint(int v) zapisuje 4 bajty do pliku 12) void writelong(long v) zapisuje 8 bajtów do pliku 13) void writeshort(int v) zapisuje 2 bajty do pliku Autor: Zofia Kruczkiewicz, Programowanie obiektowe Java, wykład 10 1

Aby odczytać plik: 14) Należy utworzyć obiekt (np. typu FileInputStream), powiązany ze plikiem danych binarnych (np. "plik3.dat"); FileInputStream plik = new FileInputStream("plik3.dat"); 15) W celu buforowania bajtów pochodzących z obiektu powiązanego ze źródłem danych np. typu FileInputStream należy utworzyć obiekt klasy BufferedInputStream BufferedInputStream bufor = new BufferedInputStream (plik); 16) W celu reprezentowania danych typu boolean, byte, double, float long, short należy utworzyć strumień danych typu DataInputStream powiązanego z obiektem buforującym typu BufferedInputStream DataInputStream dana= new DataInputStream (bufor); Dalej podano metody strumienia danych do odczytu danych z pliku: 17) Pojedyncze bajty mogą być odczytywane z pliku za pomocą metody: int read() 18) Całe ciągi bajtów mogą być odczytywane z pliku za pomocą metody: int read(byte[] cbuf, int off, int len) metoda, która czyta plik i zapisuje do tablicy cbuf od indeksu off liczbę len bajtów i zwraca przez return liczbę faktycznie odczytanych bajtów 19) boolean readboolean() czyta z pliku 1 bajt i wraca wartość true lub false 20) byte readbyte() czyta z pliku 1 bajt i zwraca wartość typu byte 21) char readchar() czyta 1 znak (2 bajty ) i zwraca 1 znak (Unicode) 22) double readdouble() czyta 8 bajtów z pliku i zwraca wartość double 23) float readfloat() czyta 4 bajtów z pliku i zwraca wartość float 24) int readint() czyta 4 bajty z pliku i zwraca wartość typu int 25) long readlong() czyta 8 bajtów z pliku i zwraca wartość typu long 26) short readshort() czyta 2 bajty z pliku i zwraca wartość typu short 27) Po zapisie i odczycie strumień danych należy zamknąć metodą close() Autor: Zofia Kruczkiewicz, Programowanie obiektowe Java, wykład 10 2

import java.io.*;//zapis za pomocą writeint i odczyt za pomocą readint z klawiatury są podawane 1-bajtowe wartości import java.util.*; public class WEWY3 { static byte webyte() { InputStreamReader wejscie = new InputStreamReader( System.in ); BufferedReader bufor = new BufferedReader( wejscie ); StringTokenizer zeton; { zeton = new StringTokenizer(bufor.readLine()); return Byte.parseByte(zeton.nextToken()); catch (IOException e) { System.err.println("Blad IO byte "+e); return 0; catch (NumberFormatException e) { System.err.println( "Blad formatu byte "+e); return 0; static void Zapiszplik3() { byte dane=0; { FileOutputStream plik = new FileOutputStream ("plik3.dat"); BufferedOutputStream bufor = new BufferedOutputStream (plik); DataOutputStream dana= new DataOutputStream (bufor); while (dane!=-1) { System.out.print("Podaj dane: "); dane=webyte(); //odczyt wartości 1-bajtowej if (dane!=-1) dana.writebyte(dane); //zapis do pliku 1 bajtu dana.close(); catch (IOException e) { System.out.println ("Blad zapisu pliku bajtowego"+e); static void Odczytajplik3() { byte dane=0; { FileInputStream plik = new FileInputStream ("plik3.dat"); BufferedInputStream bufor = new BufferedInputStream (plik); DataInputStream dana= new DataInputStream (bufor); { while (true) { dane=dana.readbyte(); System.out.print(dane);//odczyt z pliku 1 bajtu catch (EOFException eof) { bufor.close(); //zamknięcie bufora przez obsługę wyjątku od czytania poza plikiem System.out.println(); catch (IOException e) { System.out.println ("Blad odczytu pliku bajtowego"+e); public static void main(string[] args) {Zapiszplik3(); Odczytajplik3(); Autor: Zofia Kruczkiewicz, Programowanie obiektowe Java, wykład 10 3

import java.io.*; //zapis za pomocą writeint i odczyt za pomocą readint z klawiatury są podawane 4-bajtowe wartości import java.util.*; public class WEWY3_ { static int weint() { InputStreamReader wejscie = new InputStreamReader( System.in ); BufferedReader bufor = new BufferedReader( wejscie ); StringTokenizer zeton; { zeton = new StringTokenizer(bufor.readLine()); return Integer.parseInt(zeton.nextToken()); catch (IOException e) { System.err.println("Blad IO int "+e); return 0; catch (NumberFormatException e) { System.err.println( "Blad formatu int "+e); return 0; static void Zapiszplik3_() { int dane=0; { FileOutputStream plik = new FileOutputStream ("plik2.dat"); BufferedOutputStream bufor = new BufferedOutputStream (plik); DataOutputStream dana= new DataOutputStream (bufor); while (dane!=-1) { System.out.print("Podaj dane: "); dane=weint(); //odczyt wartości 4-bajtowej if (dane!=-1) dana.writeint(dane); //zapis do pliku 4 bajtów dana.close(); catch (IOException e) { System.out.println ("Blad zapisu pliku bajtowego"+e); static void Odczytajplik3_() { int dane=0; { FileInputStream plik = new FileInputStream ("plik2.dat"); BufferedInputStream bufor = new BufferedInputStream (plik); DataInputStream dana= new DataInputStream (bufor); { while (true) { dane=dana.readint(); System.out.print(dane); //odczyt z pliku 4 bajtów catch (EOFException eof) { bufor.close(); //zamknięcie bufora przez obsługę wyjątku od czytania poza plikiem System.out.println(); catch (IOException e) { System.out.println ("Blad odczytu pliku bajtowego"+e); public static void main(string[] args) { Zapiszplik3_(); Odczytajplik3_(); Autor: Zofia Kruczkiewicz, Programowanie obiektowe Java, wykład 10 4

2) Serializacja obiektów Jest to mechanizm szeregowego zapisu do pliku związanego ze strumieniem wyjściowym ciągu bajtów po wykonaniu konwersji obiektu do postaci szeregowej i Odczytu szeregowego ciągu bajtów z pliku związanego ze strumieniem wejściowym i dokonanie konwersji do postaci danej (obiektu, typu podstawowego: int, float itp.) Mechanizm ten pozwala zachować całe obiekty w pliku po zakończeniu programu Obiekty zapisywane do pliku muszą implementować pusty interfejs Serializable (obiekty są serializowane) Obiekty z zagnieżdżonymi obiektami są w całości zapisywane do pliku pod warunkiem, że zagnieżdżone obiekty też są serializowane Obiekty zagnieżdżone w serializowanych klasach mogą być pomijane przy zapisie do strumienia, jeśli to konieczne, za pomocą słowa kluczowego transient Np. public transient String s = Kowalski ; Autor: Zofia Kruczkiewicz, Programowanie obiektowe Java, wykład 10 5

Procedura korzystania ze strumieni obiektowych powiązanych z plikami binarymi Aby utworzyć plik: 1) Należy utworzyć obiekt (np. typu FileOutputStream), powiązany ze plikiem danych binarnych (np. "Wiadomosc.obj"); FileOutputStream plikobiektow = new FileOutputStream("Wiadomosc.obj"); 2) W celu utworzenia wyjściowego strumienia obiektowego powiązanego z obiektem związanym ze źródłem danych np. typu FileOutputStream należy utworzyć obiekt klasy ObjectOutputStream ObjectOutputStream strumienobiektow=new BufferedOutputStream (plikobiektow); 3) obiekty dziedziczące po Object i implementujace interfejs Serializable są zapisywane do pliku w postaci szeregowej za pomocą metody void writeobject(object ob) Dalej podano część metod strumienia obiektów do zapisu różnych danych do pliku: 4) Pojedyncze bajty mogą być zapisywane do pliku za pomocą metody: void write(int b) 5) Całe ciągi bajtów mogą być zapisywane do pliku za pomocą metody: void write(byte[]cbuf) metoda, która czyta zawartość tablicy bajtów (cbuf.length) i zapisuje ją do strumienia 6) Całe ciągi bajtów mogą być zapisywane do pliku za pomocą metody: void write(byte[] cbuf, int off, int len) metoda, która czyta z tablicy cbuf od indeksu off liczbę len bajtów i zapisuje do pliku 7) void writeboolean(boolean v) zapisuje do pliku 1-bajtową wartość 8) void writebyte(int v) zapisuje do pliku 1-bajtową wartość 9) void writechar(int v) zapisuje znak jako 2-bajtową wartość pierwszy starszy bajt (Unicode) 10) void writedouble(double v) zapisuje 8-bajtową wartość do pliku 11) void writefloat(float v) zapisuje 4-bajtową wartość do pliku 12) void writeint(int v) zapisuje 4 bajty do pliku 13) void writelong(long v) zapisuje 8 bajtów do pliku 14) void writeshort(int v) zapisuje 2 bajty do pliku Autor: Zofia Kruczkiewicz, Programowanie obiektowe Java, wykład 10 6

Aby odczytać plik: 1) Należy utworzyć obiekt (np. typu FileInputStream), powiązany ze plikiem danych binarnych (np. "Wiadomosc.obj"); FileInputStream plik = new FileInputStream("Wiadomosc.obj"); 2) W celu odczytu obiektow pochodzących z obiektu powiązanego ze źródłem danych np. typu FileInputStream należy utworzyć obiekt klasy ObjectInputStream ObjectInputStream bufor = new ObjectInputStream (plik); 3) Odczytu obiektów z strumienia należy wykonać za pomocą metody Object readobject() Dalej podano niektóre metody strumienia obiektów do odczytu danych z pliku: 4) Pojedyncze bajty mogą być odczytywane z pliku za pomocą metody: int read() 5) Całe ciągi bajtów mogą być odczytywane z pliku za pomocą metody: int read(byte[] cbuf, int off, int len) metoda, która czyta plik i zapisuje do tablicy cbuf od indeksu off liczbę len bajtów i zwraca przez return liczbę faktycznie odczytanych bajtów 6) boolean readboolean() czyta z pliku 1 bajt i wraca wartość true lub false 7) byte readbyte() czyta z pliku 1 bajt i zwraca wartość typu byte 8) char readchar() czyta 1 znak (2 bajty - Unicode ) i zwraca 1 znak 9) double readdouble() czyta 8 bajtów z pliku i zwraca wartość double 10) float readfloat() czyta 4 bajtów z pliku i zwraca wartość float 11) int readint() czyta 4 bajty z pliku i zwraca wartość typu int 12) long readlong() czyta 8 bajtów z pliku i zwraca wartość typu long 13) short readshort() czyta 2 bajty z pliku i zwraca wartość typu short 14) Po zapisie i odczycie strumień obiektów należy zamknąć metodą close() Autor: Zofia Kruczkiewicz, Programowanie obiektowe Java, wykład 10 7

import java.io.*; import java.util.*; class Wiadomosc implements Serializable { String dane; Date data; static String westring() { InputStreamReader wejscie = new InputStreamReader( System.in ); BufferedReader bufor = new BufferedReader( wejscie ); System.out.print("Podaj wiadomosc: "); { return bufor.readline(); catch (IOException e) { System.err.println("Blad IO String"); return ""; public void zapiszwiadomosc() { data = new Date(); System.out.println(data); dane =westring(); public void odczytajwiadomosc() { System.out.println(data); System.out.println(dane); Autor: Zofia Kruczkiewicz, Programowanie obiektowe Java, wykład 10 8

public class p6_6 { static void Zapiszobiektydopliku() { Wiadomosc wiadomosc = new Wiadomosc(); wiadomosc.zapiszwiadomosc(); { FileOutputStream plikobiektow = new FileOutputStream ("Wiadomosc.obj"); ObjectOutputStream strumienobiektow = new ObjectOutputStream (plikobiektow); strumienobiektow.writeobject(wiadomosc); strumienobiektow.close(); System.out.println("Obiekt wiadomosc zostal zapisany do pliku"); catch (IOException e) { System.out.println ("Blad zapisu pliku obiektowego"+e); static void Odczytajobiektyzpliku() { Wiadomosc wiadomosc = null; { FileInputStream plikobiektow = new FileInputStream ("Wiadomosc.obj"); ObjectInputStream strumienobiektow = new ObjectInputStream (plikobiektow); wiadomosc = (Wiadomosc)strumienobiektow.readObject(); System.out.println("Obiekt wiadomosc zostal odczytany z pliku"); if (wiadomosc!= null) wiadomosc.odczytajwiadomosc(); strumienobiektow.close(); catch (Exception e) { System.out.println ("Blad odczytu pliku obiektowego"+e); public static void main(string[] args) { Zapiszobiektydopliku(); Odczytajobiektyzpliku(); Autor: Zofia Kruczkiewicz, Programowanie obiektowe Java, wykład 10 9