Az új be- és kimenet könyvtár

Hasonló dokumentumok
Helyes-e az alábbi kódrészlet? int i = 1; i = i * 3 + 1; int j; j = i + 1; Nem. Igen. Hányféleképpen lehet Javaban megjegyzést írni?

Java programozási nyelv 10. rész Input/output kezelés

Kivételek kezelése (exception handling) Hibakezelés old style. Kivételkezelés

Java bevezet o Kab odi L aszl o Kab odi L aszl o Java bevezet o

Segédanyag: Java alkalmazások gyakorlat

Programozási nyelvek Java

Az emelt szintű. informatika érettségi. programozási feladatainak. megoldása Java nyelven. NetBeans IDE 8.1 környezetben

ANDROID ALKALMAZÁSFEJLESZTÉS

Java programozási nyelv

Algoritmusok és adatszerkezetek II.

CREATE TABLE student ( id int NOT NULL GENERATED ALWAYS AS IDENTITY PRIMARY KEY, name varchar(100) NOT NULL, address varchar(100) NOT NULL )

Szoftvertechnológia alapjai Java előadások

OOP: Java 8.Gy: Abstract osztályok, interfészek

Objektum Orientált Programozás. 11. Kivételkezelés 44/1B IT MAN

OBJEKTUM ORIENTÁLT PROGRAMOZÁS JAVA NYELVEN. vizsgatételek

C# nyelv alapjai. Krizsán Zoltán 1. Objektumorientált programozás C# alapokon tananyag. Általános Informatikai Tanszék Miskolci Egyetem

Java Programozás 4. Gy: Java GUI. Tipper, MVC kalkulátor

Az osztályok csomagokba vannak rendezve, minden csomag tetszőleges. Könyvtárhierarhiát fed: Pl.: java/util/scanner.java

OOP: Java 8.Gy: Gyakorlás

Informatika terméktervezőknek

Java Programozás 1. Gy: Java alapok. Ismétlés ++

Magas szintű programozási nyelvek 2 Előadás jegyzet

Ja J v a a v a há h l á óz ó a z t a i al a ka k l a maz ma á z s á o s k o Socket, URL

JAVA PROGRAMOZÁS 3.ELŐADÁS

Java Programozás 11. Ea: MVC modell

Szoftvertechnológia alapjai Java előadások

Objektumorientált programozás C# nyelven

Programozási technológia 2.

Objektumorientált programozás C# nyelven III.

Java Programozás 6. Gy: Java alapok. Adatkezelő 2.rész

Programozási nyelvek és módszerek Java Thread-ek

BME MOGI Gépészeti informatika 4.

Java Programozás 9. Gy: Java alapok. Adatkezelő 5.rész

Java Programozás 3. Gy: Java GUI. Swing, AWT

Segédanyag: Java alkalmazások gyakorlat

Programozás II. ATM példa Dr. Iványi Péter

Kommunikáció Androidon Mobilinternet Wifi

A WEB programozása - JSP1 dr.gál Tibor őszi félév

3. Gyakorlat Ismerkedés a Java nyelvvel

7. K: JAVA alapok Konzultáció

Abstract osztályok és interface-ek. 7-dik gyakorlat

A Jáva programozási nyelv rejtelmei

Kivételkezelés, naplózás. Exception handling, logging

OOP: Java 4.Gy: Java osztályok

Programozás I. Első ZH segédlet

3. Határozza meg és írja ki a minta szerint, hogy a forrásállományban hány kémiai elem felfedezési adatai

List<String> l1 = new ArrayList<String>(); List<Object> l2 = l1; // error

Java II. I A Java programozási nyelv alapelemei

I. 288.: Utcai WiFi térkép


Gelle Kitti Algoritmusok és adatszerkezetek gyakorlat - 07 Hasítótáblák

Java Database Connectivity (JDBC)

Java és web programozás

Programozás BMEKOKAA146. Dr. Bécsi Tamás 1. Előadás

Hello World Servlet. Készítsünk egy szervletet, amellyel összeadhatunk két számot, és meghívásakor üdvözlőszöveget ír a konzolra.

Kommunikáció - Wi-Fi, Mobil internet - Bluetooth - GSM / GPRS és SMS - NFC

Programozási nyelvek II.: JAVA

OOP: Java 11.Gy: Enumok, beágyazott osztályok. 13/1 B ITv: MAN

Példaprogramok Android alá (Lista, mentés, visszatöltés, pattogó android figura) Android alapok. Android játékfejlesztés.

Debreceni Egyetem Informatika Kar. Mobiltelefon programozás és mobil adatbázis-kezelés

Programozás I. 3. gyakorlat. Szegedi Tudományegyetem Természettudományi és Informatikai Kar

Osztályszintű elérés, kivételkezelés, fájlkezelés

Torna. A torna.csv UTF-8 kódolású állományban soronként egy versenyző eredményeit tároljuk. Az adatokat pontosvessző választja el egymástól.

Kalapácsvetés 2016 szöveges

INFORMATIKAI ALAPISMERETEK

Segédanyag: Java alkalmazások gyakorlat

Programozás C nyelven (3. ELŐADÁS) Sapientia EMTE

INFORMATIKAI ALAPISMERETEK

C# osztályok. Krizsán Zoltán

Programozási technológia

Java VI. Egy kis kitérő: az UML. Osztály diagram. Általános Informatikai Tanszék Utolsó módosítás:

Számítástechnika I. BMEKOKAA152 BMEKOKAA119 Infokommunikáció I. BMEKOKAA606. Dr. Bécsi Tamás

Java II. I A Java programozási nyelv alapelemei

Programozási nyelvek II.: JAVA, 4. gyakorlat

Adatbázis alapú rendszerek gyakorlat Adatbázis alapú alkalmazásfejlesztés Java, C# környezetben

Algoritmusok és adatszerkezetek II.

Programozási nyelvek II.: JAVA

Programozási nyelvek Java

Programozási nyelvek II.: JAVA, 4. gyakorlat

ANDROID ALKALMAZÁSFEJLESZTÉS

A Java nyelv. Bevezetés, alapok Elek Tibor

Modern unit és integrációs tesztelés

abkezel.java import java.awt.*; import java.awt.event.*; import javax.swing.*; import java.sql.*; public class abkezel extends JFrame {

117. AA Megoldó Alfréd AA 117.

Java és web programozás

BME MOGI Gépészeti informatika 8.

Kivételkezelés, beágyazott osztályok. Nyolcadik gyakorlat

.NET alapszolgáltatások 2.

Kivételek. A program végrehajtása során ritkán bekövetkező események Nem a fő végrehajtási ág ; logikailag alacsonyabbrendű feladat jelzése

Programozási nyelvek II. JAVA EA+GY 1. gyakolat

XML adatkezelés I. Az SAX szabvány. Dr. Kovács László Miskolci Egyetem Általános Informatikai Tanszék. XML adatok kezelési lehetőségei

// keressük meg a legnagyobb faktoriális értéket, ami kisebb, // mint százmillió

Kommunikáció Androidon Mobilinternet Wifi

Java programozási nyelv 4. rész Osztályok II.

Java és web programozás

Objektum orientált programozás Java-ban

Vé V g é r g e r h e a h j a tá t s á i s s z s ál á ak a Runnable, Thread

Concurrency in Swing

Tartalom DCOM. Történeti áttekintés. Történeti áttekintés. Történeti áttekintés. Történeti áttekintés

BME MOGI Gépészeti informatika 7.

Átírás:

Az új be- és kimenet könyvtár import java.io.ioexception; import java.io.fileinputstream; import java.io.fileoutputstream; import java.nio.channels.filechannel; import java.nio.bytebuffer; class Masol { static void masol( FileChannel in, FileChannel out ) throws IOException { ByteBuffer buffer = ByteBuffer.allocate(1024); buffer.clear(); while( in.read(buffer)!= -1 ){ buffer.flip(); out.write(buffer); buffer.clear(); public static void main( String[] args ) throws IOException { FileChannel in = (new FileInputStream(args[0])).getChannel(); FileChannel out = (new FileOutputStream(args[1])).getChannel(); masol(in,out); out.close(); in.close(); static void másol( ReadableByteChannel in, WritableByteChannel out ) throws IOException { ByteBuffer buffer = ByteBuffer.allocate(1024); while( in.read( (ByteBuffer)buffer.clear() )!= -1 ){ out.write( (ByteBuffer)buffer.flip() ); public static void main( String[] args ) throws IOException { FileInputStream fin = new FileInputStream(args[0]); FileChannel in = fin.getchannel(); FileOutputStream fout = new FileOutputStream(args[1]); FileChannel out = fout.getchannel(); másol(in,out); finally { fout.close(); finally { fin.close(); 1

1. A buerek m ködése public static void main( String[] args ) throws IOException { ByteBuffer buf = ByteBuffer.allocate(100); buf.clear(); buf.put((byte)3); buf.put((byte)5); buf.put((byte)7); buf.put((byte)11); buf.flip(); FileOutputStream fout = new FileOutputStream(args[0]); FileChannel out = fout.getchannel(); out.write(buf); finally { fout.close(); buf.put((byte)3).put((byte)5).put((byte)7).put((byte)11); buf.put( new byte[]{3,5,7,11 ); buf.put( primek, 1, 4 ); static boolean bennevan( byte minta, ReadableByteChannel in ) throws IOException { ByteBuffer buffer = ByteBuffer.allocate(1024); while( in.read((bytebuffer)buffer.clear())!= -1 ){ buffer.flip(); while( buffer.position() < buffer.limit() ){ if( buffer.get() == minta ){ return true; return false; while( buffer.hasremaining() ){ if( buffer.get() == minta ){ return true; public ByteBuffer get( byte[] dst ) public ByteBuffer get( byte[] dst, int offset, int length ) public ByteBuffer put( int index, byte b ) public byte get( int index ) public final int position() public final int limit() public final Buffer position(int newposition) public final Buffer limit(int newlimit) 2

2. Buerek létrehozása 2.1. Tömb a buer belsejében static void kitolt( ByteBuffer buffer, byte ertek ){ if( buffer.hasarray() ){ byte[] tartalom = buffer.array(); int kezdopozicio = buffer.arrayoffset(); int utolsopoziciopluszegy = kezdopozicio + buffer.capacity(); java.util.arrays.fill(tartalom,kezdopozicio,utolsopoziciopluszegy,ertek); else {... static void kiir( byte[] adatok, WritableByteChannel out ) throws IOException { ByteBuffer buffer = ByteBuffer.wrap(adatok); out.write( buffer ); 2.2. Buerek tartalmának megosztása ByteBuffer masik = buffer.duplicate(); ByteBuffer harmadik = buffer.slice(); import java.nio.bytebuffer; class Szelet { public static void main( String[] args ){ ByteBuffer buffer = ByteBuffer.allocate(1024); for( byte b=0; b<10; ++b ){ buffer.put( b ); buffer.position(3).limit(7); ByteBuffer szelet = buffer.slice(); for( int i=0; i<szelet.capacity(); ++i ){ byte b = szelet.get(i); b *= 11; szelet.put( i, b ); buffer.position(0).limit(10); while( buffer.remaining() > 0 ){ System.out.print( buffer.get() + " " ); 0 1 2 33 44 55 66 7 8 9 3

2.3. Különböz primitív típusok támogatása static double osszeg( ReadableByteChannel in ) throws IOException { double osszeg = 0.0; ByteBuffer buffer = ByteBuffer.allocate(1024); while( in.read((bytebuffer)buffer.clear())!= -1 ){ buffer.flip(); FloatBuffer adatok = buffer.asfloatbuffer(); while( adatok.hasremaining() ){ osszeg += adatok.get(); return osszeg; static double osszeg( ReadableByteChannel in ) throws IOException { double osszeg = 0.0; ByteBuffer buffer = ByteBuffer.allocate(1024); FloatBuffer adatok = buffer.asfloatbuffer(); while( in.read((bytebuffer)buffer.clear())!= -1 ){ adatok.position(0).limit(buffer.remaining()/4); while( adatok.hasremaining() ){ osszeg += adatok.get(); return osszeg; static double osszeg( ReadableByteChannel in ) throws IOException { double osszeg = 0.0; ByteBuffer buffer = ByteBuffer.allocate(1024); while( in.read((bytebuffer)buffer.clear())!= -1 ){ buffer.flip(); while( buffer.hasremaining() ){ osszeg += buffer.getfloat(); return osszeg; 4

static void becsomagol( ByteBuffer buffer, Szamla szamla ){ buffer.clear(); buffer.putlong(szamla.azonosito()); buffer.putint(szamla.egyenleg()); int[] tranzakciok = szamla.tranzakciok(); buffer.putshort((short)tranzakciok.length); IntBuffer nezet = buffer.asintbuffer(); nezet.put(tranzakciok); buffer.position( buffer.position() + 4*tranzakciok.length ); buffer.flip(); buffer.order(byteorder.little_endian); 5

2.4. Csak olvasható buerek static long adatokatolvasesvalamitkiszamol( IntBuffer buffer ){...... public static void main( String[] args ){ IntBuffer buffer;... // létrehozzuk a buffert és feltöltjük adatokkal long eredmeny = adatokatolvasesvalamitkiszamol(buffer.asreadonlybuffer());... // felhasználjuk a kiszámított eredményt 6

2.5. Közvetlen és leképzett buerek FileChannel channel = new RandomAccessFile("large.dat","rw").getChannel(); MappedByteBuffer buffer = channel.map(filechannel.mapmode.read_write, 0, channel.size()); channel.close(); buffer.load(); int limit = buffer.limit(); for( int i = buffer.position(); i < limit; ++i ){ buffer.put( i, (byte) (buffer.get(i)+1) ); buffer.force(); 7

3. Nem blokkoló IO while( true ){ out.writedouble( (double) in.readshort() ); out.flush(); catch( java.io.eofexception eof ){ Selector selector = Selector.open(); /* használjuk */ /* esetleg catch-ek */ finally { selector.close(); SelectableChannel channel =... channel.configureblocking(false); channel.register( selector, SelectionKey.OP_READ SelectionKey.OP_WRITE ); s.select(); Set<SelectionKey> feldolgozhatók = s.selectedkeys(); for( SelectionKey feldolgozható: feldolgozhatók ){ SelectableChannel channel = feldolgozható.channel(); if( feldolgozható.isreadable() ){ // olvassunk channel-r l if( feldolgozható.iswritable() ){ // írjuk ki channel-re, amit szeretnénk feldolgozhatók.clear(); SelectionKey feldolgozható =... // egy feldolgozható csatorna kulcsa SelectableChannel channel = feldolgozható.channel(); ByteBuffer buffer =...... int beolvasottbájtokszáma = ((ReadableByteChannel)channel).read(buffer); if( beolvasottbájtokszáma == -1 ){ // EOF jel, a partner bontotta a kapcsolatot feldolgozható.cancel(); channel.close(); else {... 8

4. Egy bonyolultabb példa 4.1. Többszálú szerver class EgyKliensKiszolgálása extends Thread { private final java.net.socket socket; private final DataInputStream in; private final DataOutputStream out; EgyKliensKiszolgálása( java.net.socket socket ) throws IOException { this.socket = socket; in = new DataInputStream(socket.getInputStream()); out = new DataOutputStream(socket.getOutputStream()); public void run(){ while( true ){ out.writedouble( válasz(in.readshort()) ); out.flush(); catch( EOFException eof ){ catch( Throwable t ){ // nem várt kivétel log-olása finally { socket.close(); catch( Throwable t ){ /* nem várt kivétel log-olása */ double válasz( short kérés ){ return (double) kérés; 9

import java.io.*; class EgyKliensKiszolgálása extends Thread {... class Szerver { public static void main( String[] args ) throws IOException { java.net.serversocket kapcsolódásihely = new java.net.serversocket(9999); while( true ){ java.net.socket kapcsolat = null; kapcsolat = kapcsolódásihely.accept(); new EgyKliensKiszolgálása(kapcsolat).start(); catch( IOException e ){ // kivétel naplózása if( kapcsolat!= null ){ kapcsolat.close(); catch( IOException ioe ){ /* kivétel naplózása */ // kapcsolódásihely.close(); 10

4.2. Több kliens kiszolgálása egy szálon import java.io.*; import java.nio.*; import java.nio.channels.*; import java.util.*; import java.net.*; class SzelektívVárakozás { public static void main( String[] args ) throws IOException { final Selector multiplexer = Selector.open(); ServerSocketChannel kapcsolódásicsatorna = null; kapcsolódásicsatorna = kapcsolódásicsatornátlétrehoz(9999); kapcsolódásicsatorna.register( multiplexer, SelectionKey.OP_ACCEPT ); leállítószálatelindít(multiplexer); System.out.println("Kliensek kiszolgálása. Leállítás: <Enter>"); klienseketkiszolgál(multiplexer); System.out.println("Leállítás..."); finally { if( kapcsolódásicsatorna!= null ){ kapcsolódásicsatorna.close(); finally { multiplexer.close();... private static ServerSocketChannel kapcsolódásicsatornátlétrehoz( int port ) throws IOException { final ServerSocketChannel kapcsolódásicsatorna = ServerSocketChannel.open(); kapcsolódásicsatorna.configureblocking(false); final InetAddress localhost = InetAddress.getLocalHost(); final InetSocketAddress address = new InetSocketAddress(localhost, port); kapcsolódásicsatorna.socket().bind(address); return kapcsolódásicsatorna; 11

private static volatile boolean legyenvége = false; private static void leállítószálatelindít( final Selector multiplexer ){ assert multiplexer!= null; Thread leállítószál = new Thread(){ public void run(){ System.in.read(); catch( IOException e ){ legyenvége = true; multiplexer.wakeup(); ; leállítószál.setdaemon(true); leállítószál.start(); 12

private static class KliensKezel { final ByteBuffer buffer = ByteBuffer.allocate(2); private final ByteBuffer outbuffer = ByteBuffer.allocate(8); private final SocketChannel csatorna; KliensKezel ( SocketChannel csatorna ){ this.csatorna = csatorna; void válaszol() throws IOException { if( buffer.remaining() == 0 ){ buffer.flip(); final short kérés = buffer.getshort(); buffer.clear(); final double válasz = válasz(kérés); outbuffer.clear(); outbuffer.putdouble(válasz); outbuffer.flip(); csatorna.write(outbuffer); static double válasz( short kérés ){ return (double)kérés; // short // double 13

private static void klienseketkiszolgál( Selector multiplexer ) throws IOException { assert multiplexer!= null; Map<SocketChannel,KliensKezel > kliensek = new HashMap<SocketChannel,KliensKezel >(); while(!legyenvége ){ multiplexer.select(); if(!legyenvége ){ Set<SelectionKey> kulcsok = multiplexer.selectedkeys(); for( SelectionKey kulcs: kulcsok ){ SelectableChannel csatorna = kulcs.channel(); if( csatorna instanceof ServerSocketChannel ){ kapcsolatotlétrehoz( (ServerSocketChannel)csatorna, multiplexer, kliensek ); else if ( csatorna instanceof SocketChannel ){ klienstkiszolgál( (SocketChannel)csatorna, kulcs, kliensek ); else { assert false; kulcsok.clear(); finally { klienseketlezár(multiplexer); 14

private static void kapcsolatotlétrehoz( ServerSocketChannel kapcsolódás, Selector multiplexer, Map<SocketChannel,KliensKezel > kliensek ){ assert kapcsolódás.keyfor(multiplexer).isacceptable(); SocketChannel kapcsolat = null; kapcsolat = kapcsolódás.accept(); assert kapcsolat!= null; kapcsolat.configureblocking(false); kapcsolat.register(multiplexer,selectionkey.op_read); kliensek.put( kapcsolat, new KliensKezel (kapcsolat) ); catch( IOException e ){ hibaüzenet("error when accepting a connection.",e); if( kapcsolat!= null ){ csatornátlezár(kapcsolat, null); 15

private static void klienstkiszolgál( SocketChannel kapcsolat, SelectionKey kulcs, Map<SocketChannel,KliensKezel > kliensek ){ assert kapcsolat.equals(kulcs.channel()) && kulcs.isreadable() && kliensek.containskey(kapcsolat); KliensKezel klienskezel = kliensek.get(kapcsolat); if( kapcsolat.read(klienskezel.buffer) == -1 ){ kliensek.remove(kapcsolat); csatornátlezár(kapcsolat,kulcs); else { klienskezel.válaszol(); catch( IOException e ){ hibaüzenet("error during communication with a client.",e); csatornátlezár(kapcsolat,kulcs); 16

private static void klienseketlezár( Selector multiplexer ){ assert multiplexer!= null; for( SelectionKey kulcs: multiplexer.keys() ){ SelectableChannel csatorna = kulcs.channel(); if( csatorna instanceof SocketChannel ){ csatornátlezár((socketchannel)csatorna, kulcs); private static void csatornátlezár( SocketChannel kapcsolat, SelectionKey kulcs ){ assert (kapcsolat!= null) && (kulcs == null kulcs.channel().equals(kapcsolat)); if( kulcs!= null ) kulcs.cancel(); kapcsolat.close(); catch( IOException e ){ hibaüzenet("error when closing a connection.",e); private static void hibaüzenet( String üzenet, Throwable kivétel ){ if( üzenet!= null ){ System.err.println(üzenet); if( kivétel!= null ){ kivétel.printstacktrace(); 17