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

Podobne dokumenty
STRUMIENIE DANYCH, SERIALIZACJA OBIEKTÓW

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

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

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

Strumienie i serializacja

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 Techniki Programowania II. Wykład 6. Wejście/Wyjście

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

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

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

Programowanie Obiektowe (Java)

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

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

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

Podstawy i języki programowania

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

Język JAVA podstawy. Wykład 6, część 2. 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.

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

dr Krzysztof Podlaski

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

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

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

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

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

Programowanie w języku Java WYKŁAD

Programowanie obiektowe

Przygotował: Jacek Sroka 1. Java SE. Strumienie

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

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

Platformy Programistyczne Podstawy języka Java

Programowanie i struktury danych

Programowanie obiektowe

Programowanie obiektowe

Platformy Programistyczne Zagadnienia sieciowe i wątki

Programowanie rozproszone w języku Java

Interfejsy, klasy wewn trzne jako szczególny rodzaj obiektów

Kolekcje obiektów. Wyj tki.

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

Strumienie, pliki. Sortowanie. Wyjątki.

1 Strumienie. 2 Pliki. 2.1 Zapis do pliku tekstowego. Programowanie w j zyku C - Adam Krechowicz, Daniel Kaczmarski

Wprowadzenie do języka Java

Java a dost p do Internetu.

Java: Graficzne interfejsy użytkownika

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

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

Programowanie obiektowe

Podstawowe części projektu w Javie

Java. Programowanie Obiektowe Mateusz Cicheński

Programowanie obiektowe

Wprowadzenie do Javy dla programistów C++

Programowanie Obiektowe Java

Kurs programowania. Wykład 9. Wojciech Macyna. 28 kwiecień 2016

Wykład 2: Podstawy Języka

Programowane refleksyjne i serializacja

Komunikacja z użyciem gniazd aplikacje klient-serwer

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

Aplikacja wielow tkowa prosty komunikator

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

Programowanie Obiektowe Java

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

Programowanie sieciowe

Systemy Rozproszone - Ćwiczenie 6

Kurs programowania. Wykład 9. Wojciech Macyna

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

Bezpieczne uruchamianie apletów wg

Gniazda komunikacji sieciowej w środowisku Java

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

Programowanie obiektowe

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

akademia androida Składowanie danych część VI

JAVA W SUPER EXPRESOWEJ PIGUŁCE

Java programowanie w sieci. java.net RMI

Korzystanie z bibliotek standardowych

Dawid Gierszewski Adam Hanasko

Aplikacja wielowątkowa prosty komunikator

Programowanie w języku Java

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

Networking. Zaawansowane technologie Javy 2019

0.1 Hierarchia klas Diagram Krótkie wyjaśnienie

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

Kurs programowania. Wykład 3. Wojciech Macyna. 22 marca 2019

Zaawansowane techniki programowania C#

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

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

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

Programowanie obiektowe

Tworzenie aplikacji w języku Java

Programowanie w języku Java. Bazy danych SQLite w Javie

1. Klasa typu sealed. Przykład 1. sealed class Standard{ class NowyStandard:Standard{ // błd!!!

Multimedia JAVA. Historia

Programowanie sieciowe

Remote Method Invocation

Programowanie obiektowe

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

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

Oprogramowanie systemów równoległych i rozproszonych Wykład 7

Programowanie współbieżne i rozproszone

Java. Michał Wójcik.

Java. Write Once, Run Anywhere

Transkrypt:

System obsªugi wej±cia i wyj±cia. Robert A. Kªopotek r.klopotek@uksw.edu.pl Wydziaª Matematyczno-Przyrodniczy. Szkoªa Nauk cisªych, UKSW 6.04.2017

Java I/O Java I/O (Input and Output) - jest to zaawansowany system obsªugi wej±cia i wyj±cia Java u»ywa koncepcji strumieni, strumieniami mog by pliki, dane przesyªane przez internet i inne biblioteka java.io zawiera wszystkie klasy potrzebne do operacji na wej±ciu i wyj±ciu aplikacji do komunikacji przez sie sªu»y Java Networking API (b dzie omawiana pó¹niej) istnieje alternatywne IO API - Java NIO (Non-blocking IO - dost p bez blokowania) 3 strumienie s tworzone automatycznie: 2 / 36 System.out - standardowy strumie«wyj±cia System.in - standardowy strumie«wej±cia System.err - standardowy strumie«bª dów

Klasa java.io.file reprezentuje pliki lub katalogi zawiera wiele wªasno±ci zale»nych od systemu operacyjnego JDK 1.7 zwiera bardziej wszechstronn i pozbawian wielu ogranicze«klas java.nio.file.path biblioteka java.io zawiera wszystkie klasy potrzebne do operacji na wej±ciu i wyj±ciu aplikacji konstruktory: public File(String pathstring) public File(String parent, String child) public File(File parent, String child) public File(URI uri) 3 / 36

Metody werykacji plików lub katalogów public boolean exists() public long length() public boolean isdirectory() public boolean isfile() public boolean canread() public boolean canwrite() public boolean delete() public void deleteonexit() public boolean renameto(file dest) public boolean mkdir() 4 / 36

Wyj tki wej±cia/wyj±cia 5 / 36

Strumienie znaków i bajtów 6 / 36

Metody OutputStream OutputStream jest klas abstrakcyjn i jest klas bazow dla wszystkich klas reprezentuj cych wyj±ciowy strumie«bajtów public void write(int)throws IOException public void write(byte[])throws IOException public void ush()throws IOException public void close()throws IOException 7 / 36

Hierarchia OutputStream 8 / 36

Metody InputStream InputStream jest klas abstrakcyjn i jest klas bazow dla wszystkich klas reprezentuj cych wej±ciowy strumie«bajtów public abstract int read()throws IOException public int available()throws IOException public void close()throws IOException 9 / 36

Hierarchia InputStream 10 / 36

Klasy strumieni Type Input (Byte) Output (Byte) Input (Character) Output (Character) Arrays ByteArrayInputStream ByteArrayOutputStream CharArrayReader CharArrayWriter Pipes PipedInputStream PipedOutputStream PipedReader PipedWriter Buering BueredInputStream BueredOutputStream BueredReader BueredWriter Filtering FilterInputStream FilterOutputStream FilterReader FilterWriter Strings StringReader StringWriter Data DataInputStream DataOutputStream Data - Formatted PrintStream PrintWriter Objects ObjectInputStream ObjectOutputStream Utilities SequenceInputStream 11 / 36

We/Wy bazuj ce na bajtach 12 / 36

Obsªuga strumieni - przykªad FileInputStream in = null ;... try { // otwarcie strumienia wej±ciowego in = new FileInputStream (...);...... } catch ( IOException ex ) { ex. printstacktrace (); } finally { // zawsze zamykaj I/ O try { if ( in!= null ) in. close (); } catch ( IOException ex ) { ex. printstacktrace (); } } try ( FileInputStream in = new FileInputStream (...)){...... } catch ( IOException ex ) { ex. printstacktrace (); } // Automatycznie zamyka strumien 13 / 36

Opakowywanie strumieni wej±cia/wyj±cia 14 / 36

Przykªad opakowywania FileInputStream filein = new FileInputStream (" in. dat " ); BufferedInputStream bufferin = new BufferedInputStream ( filein ); DataInputStream datain = new DataInputStream ( bufferin ); // lub DataInputStream in = new DataInputStream ( new BufferedInputStream ( new FileInputStream (" in. dat " ))); 15 / 36

Metody DataInputStream public nal int readint() throws IOExcpetion; public nal double readdoube() throws IOExcpetion; public nal byte readbyte() throws IOExcpetion; public nal char readchar() throws IOExcpetion; public nal short readshort() throws IOExcpetion; public nal long readlong() throws IOExcpetion; public nal boolean readboolean() throws IOExcpetion; public nal oat readfloat() throws IOExcpetion; public nal int readunsignedbyte() throws IOExcpetion; public nal int readunsignedshort() throws IOExcpetion; public nal String readline() throws IOException; public nal String readutf() throws IOException; 16 / 36

Metody DataOutputStream public nal void writeint(int i) throws IOExcpetion; public nal void writefloat(oat f) throws IOExcpetion; public nal void writedoube(double d) throws IOExcpetion; public nal void writebyte(int b) throws IOExcpetion; public nal void writeshort(int s) throws IOExcpetion; public nal void writelong(long l) throws IOExcpetion; public nal void writeboolean(boolean b) throws IOExcpetion; public nal void writechar(int i) throws IOExcpetion; public nal void writebytes(string str) throws IOExcpetion; public nal void writechars(string str) throws IOExcpetion; - Big-endian public nal void writeutf(string str) throws IOException; 17 / 36

Strumienie bazuj ce na znakach 18 / 36

Pakiet java.nio.charset tªumaczy z wewn trznego kodowania Java, Unicode (UCS-2), na inne kodowania, np. US-ASCII, ISO-8859-x, UTF-8, UTF-16, UTF-16BE, UTF-16LE, itp. metody: public static SortedMap<String,Charset> availablecharsets() public static Charset defaultcharset() public static Charset forname(string charsetname) public static boolean issupported(string charsetname) aby zmienic domy±ny charset dla JVM: java -Dfile.encoding=UTF-8 TestCharset 19 / 36

Serializacja obiektów i strumienie obiektów (1/2) strumienie danych pozwalaj tylko na zapis i odczyt typów prymitywnych i String strumienie obiektów pozwalaj pój± krok dalej, wi c zapisywa i odczytywa caªe obiekty (równie» struktury danych wraz z danymi) serializacja obiektu jest to proces reprezentacji "pewnego stanu obiektu" za pomoc strumienia bitów w taki sposób, aby ten strumie«bitów mógª by zapisany na no±niku zewn trznym ( dysku czy przez sie ) 20 / 36

Serializacja obiektów i strumienie obiektów (2/2) strumie«bitów stworzony przez serializacj mo»e by pó¹niej u»yty do rekonstrukcji zapisanego stanu obiektu serializacja obiektów jest konieczna, aby przesªa obiekt w sposób trwaªy (persistence) do aplikacji takich jak: web serwisy, aplikacje rozproszone na obiektach (np. Hadoop), Remote Method Invocation (RMI) obiekty, które wymagaj serializacji musz implementowa interfejs java.io.serializable lub java.io.externalizable bardzo du»o obiektów w Javie jest serializowalnych, np. wrapery, kolekcje, klasy GUI 21 / 36

Obsªuga strumieni obiektów - przykªad ObjectOutputStream out = new ObjectOutputStream ( new BufferedOutputStream ( new FileOutputStream ( " object. ser " ))); out. writeobject (" Aktualny czas " ); out. writeobject ( new Date ()); out. flush (); out. close (); ObjectInputStream in = new ObjectInputStream ( new BufferedInputStream ( new FileInputStream ( " object. ser " ))); String str = ( String ) in. readobject (); Date d = ( Date ) in. readobject ( new Date ()); in. close (); 22 / 36

Strumienie obiektów - uwagi typy prymitywne i tablice s domy±lnie serializowalne ObjectInputStream i ObjectOutputStream implementuj DataInput i DataOutput, wi c mo»na u»ywa ich metod takich, jak np. writeint() pola statyczne nie s serializowalne, poniewa» nale» do klasy a nie do obiektu aby nie serializowa wybranych pól nale»y u»y modykatora transient 23 / 36

Wej±cie/wyj±cie w Java 1.7 w Javie 1.7 dodano rozszerzony system obsªugi w pakiecie java.nio.file oraz pakietach powi zanych aby utworzy uchwyt do ±cie»ki nale»y u»y java.nio.file.paths public static Path get(string rst, String... more) public static Path get(uri uri) klasa java.nio.file.files obsªuguje pliki i katalogi klasa Files.walkFileTree() - sªu»y do poruszania si po drzewie katalogów 24 / 36

Kanaªy i bufory kanaª klasy Channel - jest podobny do strumienia, ale nie ma tam blokowania z kanaªu mo»emy wczyta dane do bufora klasy Buffer jest wiele rodzajów kanaªów: FileChannel - czyta i zapisuje dane do pliku DatagramChannel - czyta i zapisuje dane przez sie prze UDP SocketChannel - czyta i zapisuje dane przez sie prze TCP ServerSocketChannel - pozwala nasªuchiwa na poªczenia TCP jak web serwer klasa Selector - pozwala jednemu w tkowi na obsªug wielu kanaªów 25 / 36

Bufory w Java NIO 26 / 36

Pojemno± bufora, pozycja i limit 27 / 36

Klasa java.nio.buer 28 / 36

Klasa Channel i Buer - przykªad RandomAccessFile afile = new RandomAccessFile ( " nio - data. txt ", " rw " ); FileChannel inchannel = afile. getchannel (); ByteBuffer buf = ByteBuffer. allocate (48); int bytesread = inchannel. read ( buf ); while ( bytesread!= -1) { System. out. println (" Read " + bytesread ); buf. flip (); while ( buf. hasremaining ()){ System. out. print (( char ) buf. get ()); } buf. clear (); bytesread = inchannel. read ( buf ); } afile. close (); 29 / 36

Java NIO: Scattering Read ByteBuffer header = ByteBuffer. allocate (128); ByteBuffer body = ByteBuffer. allocate (1024); ByteBuffer [] bufferarray = { header, body }; channel. read ( bufferarray ); 30 / 36

Java NIO: Gathering Write ByteBuffer header = ByteBuffer. allocate (128); ByteBuffer body = ByteBuffer. allocate (1024); // zapis danych do buforów ByteBuffer [] bufferarray = { header, body }; channel. write ( bufferarray ); 31 / 36

Selektor w Java NIO Selector selector = Selector. open (); channel. configureblocking ( false ); SelectionKey key = channel. register ( selector, SelectionKey. OP_READ ) // SelectionKey. OP_CONNECT // SelectionKey. OP_ACCEPT // SelectionKey. OP_READ // SelectionKey. OP_WRITE 32 / 36

Selektor - przykªad Selector selector = Selector. open (); channel. configureblocking ( false ); SelectionKey key = channel. register ( selector, SelectionKey. OP_READ ) while ( true ) { int readychannels = selector. select (); if ( readychannels == 0) continue ; Set < SelectionKey > selectedkeys = selector. selectedkeys (); Iterator < SelectionKey > keyiterator = selectedkeys. iterator (); while ( keyiterator. hasnext ()) { SelectionKey key = keyiterator. next (); if ( key. isacceptable ()) { // a connection was accepted by a ServerSocketChannel. } else if ( key. isconnectable ()) { // a connection was established with a remote server. } else if ( key. isreadable ()) { // a channel is ready for reading } else if ( key. iswritable ()) { // a channel is ready for writing } keyiterator. remove (); } 33 / 36 }

Java IO vs Java NIO (1/2) 34 / 36

Java IO vs Java NIO (2/2) Java NIO - pojedynczy w tek obsªuguje wiele poª cze«java IO - jadno poª czenie jest obsªugiwane przez jeden watek 35 / 36

36 / 36 Pytania?