Lettura/scrittura file binari classi che permettono di scrivere o leggere flussi di dati di tipo base espressi in maniera binaria DataOutputStream DataInputStream Java VII Ulteriori classi di I/O Paolo Bison la rappresentazione binaria usata è indipendente dall’architettura file portabili Fondamenti di Informatica 1 A.A. 2003/04 Università di Padova Java VII, Paolo Bison, A.A. 2003-04, 2003-11-18 – p.2/10 Java VII, Paolo Bison, A.A. 2003-04, 2003-11-18 – p.1/10 DataOutputStream DataOutputStream: metodi permette di scrivere elementi di tipo base in un formato binario ereditarietà java.io.OutputStream java.io.FilterOutputStream java.io.DataOutputStream oltre a ridefinire i metodi ereditati void write(int) void write(byte[] b, int off, int len) definisce metodi per scrivere in forma binaria elementi di tipo base: void writeBoolean(boolean) void writeFloat(float) void writeByte(int) void writeInt(int) i metodi possono lanciare una IOException void writeBytes(String) void writeLong(long) costruttore DataOutputStream(OutputStream out) crea un DataOutputStream per scrivere dati sul stream out void writeChar(int) void writeShort(int) void writeChars(String) void writeUTF(String) void writeDouble(double) e sapere il numero di byte scritti int size() Java VII, Paolo Bison, A.A. 2003-04, 2003-11-18 – p.4/10 Java VII, Paolo Bison, A.A. 2003-04, 2003-11-18 – p.3/10 DataInputStream DataInputStream: metodi permette di leggere elementi di tipo base scritti in un formato binario ereditarietà java.io.InputStream java.io.FilterInputStream java.io.DataInputStream i metodi possono lanciare una IOException costruttore DataInputStream(InputStream in) crea un DataInputStream per leggere dati dal stream in oltre ad avere i soliti metodi di lettura, definisce metodi per leggere elementi di tipo base espressi in forma binaria : boolean readBoolean() int readInt() int readByte() long readLong() char readChar() short readShort() void readDouble(double) int readUnsignedByte() float readFloat() int readUnsignedShort() void readFully(byte[]) String readUTF() e saltare un certo numero di byte int skipBytes(int) Java VII, Paolo Bison, A.A. 2003-04, 2003-11-18 – p.6/10 Java VII, Paolo Bison, A.A. 2003-04, 2003-11-18 – p.5/10 External Merge Sort External Merge Sort: esempio dati memorizzati in una struttura sequenziale file -7 -7 dimensione -1 -1 -7 -7 -1 3 5 -7 -1 7 5 -2 6 -2 6 -9 7 -9 7 3 5 -9 -2 6 7 -7 -1 3 5 -9 -2 6 7 -9 -7 -1 -2 Java VII, Paolo Bison, A.A. 2003-04, 2003-11-18 – p.7/10 -9 6 7 7 -9 3 -9 -2 6 -1 6 5 -7 5 -2 -1 -2 3 5 3 dei dati deve essere potenza di 2 3 3 6 5 7 Java VII, Paolo Bison, A.A. 2003-04, 2003-11-18 – p.8/10 External Merge Sort: algoritmo External Merge Sort: codice l’algoritmo si basa su due passi: distribute si considera il file di ingresso formato da sotto-sequenze (run) ordinate di una certa lunghezza (all’inizio 1) e si distribuiscono queste sotto-sequenze su due file differenti merge si fondono le sotto-sequenze a due a due, ciascuna presa da uno dei due file generati al passo precedente, in maniera da costruire un file contenente sotto-sequenze ordinate di lunghezza doppia si eseguono questi due passi fino a quando si ottiene un file con un’unica sotto-sequenza ordinata Java VII, Paolo Bison, A.A. 2003-04, 2003-11-18 – p.9/10 codice indipendente dalla struttura del file si devono leggere e scrivere dati la cui struttura non è conosciuta si usano oggetti per rappresentare i dati che siano sia KeyComparable che DataStreamable al metodo che realizza il sort si può passare la classe istanze della classe Java VII, Paolo Bison, A.A. 2003-04, 2003-11-18 – p.10/10