Java VII Ulteriori classi di I/O Lettura/scrittura file binari classi

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