Streams Java

20
Streams Java

description

Streams Java. Sumário. Streams Emprego Tipos Funcionalidades Data Sink Streams Processing Streams Cadeias de Streams Classes de Streams. Stream. Um programa lê / grava informações de / para um canal - PowerPoint PPT Presentation

Transcript of Streams Java

Page 1: Streams Java

Streams Java

Page 2: Streams Java

Sumário

• Streams– Emprego– Tipos– Funcionalidades– Data Sink Streams– Processing Streams– Cadeias de Streams– Classes de Streams

2

Page 3: Streams Java

• 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

Page 4: Streams Java

• 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

Page 5: Streams Java

Input e Output Streams

Input Stream

Output Stream

5

Page 6: Streams Java

• 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

Page 7: Streams Java

• Existem dois tipos de streams: –Streams de Bytes (classes

*Stream)

–Streams de Caracteres (classes *Reader ou *Writer)

Tipos de Streams

7

Page 8: Streams Java

Cópia de bytes

8

Page 9: Streams Java

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

Page 10: Streams Java

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

Page 11: Streams Java

• 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

Page 12: Streams Java

• 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

Page 13: Streams Java

• 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

Page 14: Streams Java

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

Page 15: Streams Java

– 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

Page 16: Streams Java

• 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

Page 17: Streams Java

• As classes base partir do qual derivam os novos processing streams são:– FilterOutputStream

– FilterInputStream

– FilterReader

– FilterWriter

Criação de processing streams

17

Page 18: Streams Java

• 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

Page 19: Streams Java

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

Page 20: Streams Java

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