slides

Propaganda
Programação II – Java Streams
Christopher Burrows
Java Streams - Introdução
 As
aplicações informáticas consistem em
trocas de dados entre duas ou mais
fontes/destinos.
 As
Streams servem para representar a fonte
ou destino dos dados dentro de uma
aplicação.
Java Streams - Introdução
 Existem
duas classes das Streams, a partir
das quais todas derivam:
–
–
InputStream (para entrada);
OutputStream (para saída);
 As
Streams têm suporte para vários tipos de
dados. (cada um com Input e Output)
Java Streams – Tipos de Dados
 Byte
Streams;
 Character Streams;
 Buffered Streams;
 Data Streams;
 Object Streams;
Java Streams – Byte Streams
 Permitem
ler sequências de bytes, sem
haver a noção de qual é o tipo de dados que
consistem.
 Só devem ser utilizados com dados
essencialmente binários (imagens, som,
etc.).
 Servem de base para todos os outros tipos
de Streams.
Java Streams – Byte Streams
public static void main(String[] args) throws IOException,
FileNotFoundException {
FileInputStream fis = new FileInputStream(“in.txt”);
FileOutputStream fos = new FileOutputStream(“out.txt”);
int temp;
while((temp = fis.read()) != -1) {
out.write(temp);
}
fis.close();
fos.close();
}
Java Streams – Character Streams
 Utiliza-se
para ler/escrever sequências de
caracteres em Unicode.
 Funcionam da mesma forma que os Byte
Streams.
 São preferiveis quando se trata de texto,
uma vez que podem representar qualquer
caracter no set Unicode.
Java Streams – Character Streams
 Ao
contrário dos Streams de bytes e todos
os outros que trabalham com formatos de
binários, os Streams de caracteres, que
trabalham com formatos de texto, utilizam o
FileReader e o FileWriter em vez do
InputStream e o OutputStream.
Java Streams – Character Streams
public static void main(String[] args) throws IOException {
FileReader fr = new FileReader(“in.txt”);
FileWriter fw = new FileWriter(“out.txt”);
int c;
while((c = fr.read()) != -1) {
fw.write(c);
}
fr.close();
fw.close();
}
Java Streams – Buffered Streams
 Os
Buffers são espaços reservados na
memória.
 Tornam
o sistema mais eficiente que os
Streams anteriores, uma vez que não é
necessário aceder ao ficheiro sempre que se
quer ler algo.
Java Streams – Buffered Streams
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new
FileInputStream(“in.txt”));
BufferedWriter bw = new BufferedWriter(new
FileOutputStream(“out.txt”));
while((br.ready()) {
bw.write(br.readLine());
bw.newLine();
}
br.close();
bw.close();
}
Java Streams – Data Streams
 Permitem
ler/escrever dados de um tipo
primitivo (int, double, float, boolean, etc...);
 Atenção:
este tipo de Streams não pode ser
usado com Objectos (Strings, BigInteger,
etc...);
Java Streams – Data Streams
public static void main(String[] args) throws IOException {
DataOutputStream dos = new DataOutputStream(new
FileOutputStream("dataStream.txt"));
for(int i = 0; i < 10; i++)
dos.writeInt(i);
DataInputStream dis = new DataInputStream(new
FileInputStream("dataStream.txt"));
try {
while(true)
System.out.println(dis.readInt());
} catch (EOFException eof) {
System.out.println("Fim do ficheiro!");
}
}
Java Streams – Object Streams
 Do
mesmo modo que os Data Streams são
utilizados com dados primitivos, existem os
Object Streams para objectos.
 Para
se poder armazenar um Objecto num
ficheiro, este deve implementar o interface
Serializable.
Java Streams – Object Streams
public static void main(String[] args) throws IOException,
ClassNotFoundException {
String ola = new String("olá!");
FileOutputStream fos = new FileOutputStream("objectStream.txt");
ObjectOutputStream oos = new ObjectOutputStream(fos);
oos.writeObject(ola);
oos.close();
fos.close();
FileInputStream fis = new FileInputStream("objectStream.txt");
ObjectInputStream ois = new ObjectInputStream(fis);
System.out.println((String)ois.readObject());
}
Java Streams – Object Streams
System.out.println((String)ois.readObject());
 Quando
se armazenam Objectos num
ficheiro, a classe do Objecto a que se refere
não é especificada, pelo que quando se está
a ler, é necessário indicá-lo.
Java Streams
É
importante fechar sempre uma Stream
depois de utilizada, para evitar fugas de
memória.
nomeDaStream.close();
Java Streams - Exercicio
 Aproveitando
a classe Pessoa da aula
anterior, criar uma nova classe MainStreams
(runnable) que crie um objecto do tipo
Pessoa e o armazene num ficheiro.
 De seguida, ler o objecto do ficheiro e
imprimir o primeiro e último nome e o
número do BI.
Download