Input/Output
Persistência

●   Até então falamos muito de memória
●   Basicamente sobre a memória RAM, que é volátil
●   Tudo pode ser facilmente perdido se o programa parar de
    executar
●   Para evitar a perda de informação devemos armazena-la ou
    persisti-la
Arquivo

●   Classe File representa um arquivo do HDD
●   Contém vários métodos relacionados a arquivos. Ex:
    createNewFile()
    delete()
    getAbsolutePath()
    list()
    mkdirs()
I/O

●   Ler e escrever bytes, caracteres e Strings de/para a entrada
    e saída padrão
●   Ler e escrever bytes, caracteres e Strings de/para arquivos
●   Utilizar buffers para agilizar a leitura e escrita através de
    fluxos
OO em casos de I/O

●   Assim como toda API do Java, ela também é orientada a
    objetos, usa e abusa de conceitos da OO: classes
    abstratas, interfaces e polimorfismo
●   Utiliza fluxos de entrada (InputStream) e saida
    (OutputStream), para operações com arquivos, sockets e
    entrada e saida padrão (teclado e console)
●   InputStream e OutputStream definem o comportamento dos
    fluxos (input ou leitura de bytes e output ou escrita de bytes)
●   Vantagem da abstração é tornar acoplavel (como um
    cartucho) a opção de I/O
Inputs

●   InputStream, InputStreamReader, BufferedReader
●   InputStream (trata a leitura de bytes): possui diversas
    subclasses, ex: ObjectInputStream, AudioInputStream,
    ByteArrayInputStream.
●   InputStreamReader (trata a leitura de caracteres):
    subclasse de Reader, feita para tratar diretamente com
    caracteres e suporta vários encodings.
●   BufferedReader (trata leitura de Strings): outra subclasse de
    Reader, que recebe um outro Reader como argumento no
    seu construtor. Sua ideia é concatenar chars de maneira
    mais transparente.
Inputs
Outputs

●   OutputStream, OutputStreamReader, BufferedWriter
●   OutputStream (trata a escrita de bytes): possui diversas
    subclasses, ex: ObjectOutputStream,
    ByteArrayOutputStream.
●   OutputStreamWriter (trata a escrita de caracteres):
    subclasse de Writer, feita para tratar diretamente com
    caracteres e suporta vários encodings.
●   BufferedWriter (trata escrita de Strings): outra subclasse de
    Writer, que recebe um outro Writer como argumento no seu
    construtor. Sua ideia é concatenar chars de maneira mais
    transparente.
Outputs
Fechando Recursos

●   Pera evitar problemas, é importante que um arquivo/recurso
    seja fechado pelo proprio programador.
●   Se um recurso não for fechado pelo programador, ele pode
    deixar de ser referenciado e o GC, eventualmente, poderá
    fecha-lo.
●   É possivel que sem um “close” alguma mudanças não
    sejam de fato efetivadas no arquivo, elas ficariam apenas
    em memoria e o programa finalizaria antes de realizar a
    modificação.
Facilitando a vida

●   A Classe Scanner surgiu com o Java 5 e sua ideia é facilitar
    a leitura de informação por um InputStream.
●   PrintStream possui vários construtores, entre eles
Duvidas?

10 io

  • 1.
  • 2.
    Persistência ● Até então falamos muito de memória ● Basicamente sobre a memória RAM, que é volátil ● Tudo pode ser facilmente perdido se o programa parar de executar ● Para evitar a perda de informação devemos armazena-la ou persisti-la
  • 3.
    Arquivo ● Classe File representa um arquivo do HDD ● Contém vários métodos relacionados a arquivos. Ex: createNewFile() delete() getAbsolutePath() list() mkdirs()
  • 4.
    I/O ● Ler e escrever bytes, caracteres e Strings de/para a entrada e saída padrão ● Ler e escrever bytes, caracteres e Strings de/para arquivos ● Utilizar buffers para agilizar a leitura e escrita através de fluxos
  • 5.
    OO em casosde I/O ● Assim como toda API do Java, ela também é orientada a objetos, usa e abusa de conceitos da OO: classes abstratas, interfaces e polimorfismo ● Utiliza fluxos de entrada (InputStream) e saida (OutputStream), para operações com arquivos, sockets e entrada e saida padrão (teclado e console) ● InputStream e OutputStream definem o comportamento dos fluxos (input ou leitura de bytes e output ou escrita de bytes) ● Vantagem da abstração é tornar acoplavel (como um cartucho) a opção de I/O
  • 6.
    Inputs ● InputStream, InputStreamReader, BufferedReader ● InputStream (trata a leitura de bytes): possui diversas subclasses, ex: ObjectInputStream, AudioInputStream, ByteArrayInputStream. ● InputStreamReader (trata a leitura de caracteres): subclasse de Reader, feita para tratar diretamente com caracteres e suporta vários encodings. ● BufferedReader (trata leitura de Strings): outra subclasse de Reader, que recebe um outro Reader como argumento no seu construtor. Sua ideia é concatenar chars de maneira mais transparente.
  • 7.
  • 8.
    Outputs ● OutputStream, OutputStreamReader, BufferedWriter ● OutputStream (trata a escrita de bytes): possui diversas subclasses, ex: ObjectOutputStream, ByteArrayOutputStream. ● OutputStreamWriter (trata a escrita de caracteres): subclasse de Writer, feita para tratar diretamente com caracteres e suporta vários encodings. ● BufferedWriter (trata escrita de Strings): outra subclasse de Writer, que recebe um outro Writer como argumento no seu construtor. Sua ideia é concatenar chars de maneira mais transparente.
  • 9.
  • 10.
    Fechando Recursos ● Pera evitar problemas, é importante que um arquivo/recurso seja fechado pelo proprio programador. ● Se um recurso não for fechado pelo programador, ele pode deixar de ser referenciado e o GC, eventualmente, poderá fecha-lo. ● É possivel que sem um “close” alguma mudanças não sejam de fato efetivadas no arquivo, elas ficariam apenas em memoria e o programa finalizaria antes de realizar a modificação.
  • 11.
    Facilitando a vida ● A Classe Scanner surgiu com o Java 5 e sua ideia é facilitar a leitura de informação por um InputStream. ● PrintStream possui vários construtores, entre eles
  • 12.