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.