Streams Java
-
Upload
amela-simmons -
Category
Documents
-
view
74 -
download
1
description
Transcript of Streams Java
Streams Java
Sumário
• Streams– Emprego– Tipos– Funcionalidades– Data Sink Streams– Processing Streams– Cadeias de Streams– Classes de Streams
2
• Um programa lê / grava informações de / para um canal
• Em Java, um canal de onde um programa pode ler ou gravar informações é chamado de Stream
Stream
3
• Cada canal capaz de gravar em um destino de dados tem um conjunto de métodos de escrita
• Cada canal capaz de ler a partir de uma fonte de dados tem um conjunto de métodos leitura
• Quando o stream é criado só temos de invocar esses métodos
Streams
4
Input e Output Streams
Input Stream
Output Stream
5
• Na leitura: • construir e abrir um stream • enquanto há informações
– ler as informações
• fechar stream
• Na gravação: • construir e abrir um stream • enquanto há informações para gravar
– gravar informações
• fechar stream
Emprego de Streams
6
• Existem dois tipos de streams: –Streams de Bytes (classes
*Stream)
–Streams de Caracteres (classes *Reader ou *Writer)
Tipos de Streams
7
Cópia de bytes
8
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
public class CopyBytes {
public static void main(String[] args) throws IOException {
FileInputStream in = null;
FileOutputStream out = null;
try {
in = new FileInputStream("xanadu.txt");
out = new FileOutputStream("outagain.txt");
int c;
while ((c = in.read()) != -1) {
out.write(c);
}
} finally {
if (in != null) {
in.close();
}
if (out != null) {
out.close();
}
}
}
}
Cópia de bytes
9
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
public class CopyCharacters {
public static void main(String[] args) throws IOException {
FileReader inputStream = null;
FileWriter outputStream = null;
try {
inputStream = new FileReader("xanadu.txt");
outputStream = new FileWriter("characteroutput.txt");
int c;
while ((c = inputStream.read()) != -1) {
outputStream.write(c);
}
} finally {
if (inputStream != null) {
inputStream.close();
}
if (outputStream != null) {
outputStream.close();
}
}
}
}
Cópia de caracteres
10
• Funcionalmente: – Data Sink (Sumidouro) Streams -
conectados diretamente com a origem ou destino
– Processing Streams - ligados a outros streams para proporcionar uma maior transparência de processamento (filtragem, compressão, etc.)
Streams
11
• Classes: – FileReader: lê caracteres de um arquivo. – FileWriter: grava caracteres em um arquivo. – FileInputStream: lê bytes de um arquivo. – FileOutputStream: grava bytes em um arquivo.
• Data Sink Streams têm apenas métodos simples de leitura / gravação – Ao criar streams Data Sink temos de especificar a fonte
• Para arquivos: o nome do arquivo • Para a rede: o socket • A partir de memória: a localização
Data Sink Streams
12
• Processing Streams – Quando se cria um processing stream, temos de especificar a
qual stream estará ele ligado
• Alguns processing streams: – DataInputStream, DataOutputStream, BufferedWriter,
BufferedReader, etc .. • Como fazer:
– Ligar a um Datastream um FileStream para gravar / ler outros tipos de dados que não sejam bytes
– Ligar a um BufferStream a um NetworkStream para “bufferizar” o acesso à rede
Processing Streams
13
import java.io.FileReader; import java.io.FileWriter; import java.io.BufferedReader; import java.io.PrintWriter; import java.io.IOException; public class CopyLines { public static void main(String[] args) throws IOException { BufferedReader inputStream = null; PrintWriter outputStream = null; try { inputStream = new BufferedReader(new FileReader("xanadu.txt")); outputStream = new PrintWriter(new FileWriter("characteroutput.txt")); String l; while ((l = inputStream.readLine()) != null) { outputStream.println(l); } } finally { if (inputStream != null) { inputStream.close(); } if (outputStream != null) { outputStream.close(); } } } }
Cópia de linhas (com bufferização)
14
– Quando tudo estiver configurado e se desejar gravar um número real em um Data Stream (invocar qualquer método de gravar):
• O programa pede ao data stream para gravar algo • O data stream obtém um conjunto de bytes e os
grava no buffer stream • O buffer stream retém os bytes até que decida a
gravá-los, de uma só vez, no file stream • O file stream efetivamente grava os bytes no
arquivo destino sempre que os receber do buffer stream
Cadeias de Streams
15
• Para cada tipo existe um InputStream (byte) ou Reader (char) e um OutputStream (byte) ou Reader (char)
• As classes Stream podem ter sub classes– Pode-se criar seus próprios streams para serem incluído
em uma cadeia
• Para isto é preciso: – Criar o construtor da classe aceitando um Stream
– Adaptar-se aos métodos de leitura / gravação e implementar as funcionalidades desejadas nesses métodos
Classes de Streams
16
• As classes base partir do qual derivam os novos processing streams são:– FilterOutputStream
– FilterInputStream
– FilterReader
– FilterWriter
Criação de processing streams
17
• A classe InputStreamReader le bytes e os decodifica em caracteres
• Cada invocação do método read() de InputStreamReader's le um ou mais bytes da entrada
• Para maior eficiência é conveniente “encapar” a classe InputStreamReader por uma classe BufferedReader.
BufferedReader in =
new BufferedReader(new InputStreamReader(System.in));
• A classe RamdomAccessFile permite leitura e gravação de modo aleatório em arquivos de acesso direto
• Um ponteiro, posicionado pelo método seek(), indica o ponto de leitura
18
Classes para acesso a arquivos
File file = new File("RandomAccessFileExample.out"); RandomAccessFile raf = new RandomAccessFile(file, "rw");
// Ler primeiro caractere do arquivo
byte ch = raf.readByte();
System.out.println(“Ler primeiro caractere: " + (char)ch);
// Incluir registro no final do arquivo
raf.write(0x0A);
raf.writeBytes(“Exemplo terminado");
19
Declaração de classe para acesso direto
Exemplo 1 (acesso direto)FileInputStream stream = new FileInputStream("../EDIIA32.txt");
InputStreamReader streamReader = new InputStreamReader(stream);
BufferedReader reader = new BufferedReader(streamReader);
RandomAccessFile raf = new RandomAccessFile
(new File("../AcessoDireto.dsk"), "rw");
arq.read(stringData);
arq.writeInt(mpr_periodo);
Exemplo 2 (acesso seqüencial)private static InputStreamReader is = new InputStreamReader( System.in );
private static BufferedReader br = new BufferedReader( is );
BufferedReader in = new BufferedReader(
new InputStreamReader(
new FileInputStream (
new File(".\\dados\\ARQ9502.DAT"))));
while (in.ready())
{
linha = in.readLine();
20
Exemplos de acessos a arquivos