Guia para Java OutputStream

Guia para Java OutputStream

1. Visão geral

Neste tutorial, exploraremos detalhes sobre a classe Java OutputStream. OutputStream é uma classe abstrata. Isso serve como a superclasse para todas as classes que representam um fluxo de saída de bytes.

Examinaremos o que essas palavras como "saída" e "fluxo" significam em mais detalhes à medida que avançamos.

2. Breve introdução ao Java IO

*OutputStream faz parte da API Java IO* , que define as classes necessárias para executar operações de E/S em Java. Tudo isso é empacotado no namespace _java.io_. Este é um dos principais pacotes disponíveis em Java desde a versão 1.0.

A partir do Java 1.4, também temos o Java NIO empacotado no namespace java.nio, que permite operações de entrada e saída sem bloqueio. Nossa área de foco para este artigo, no entanto, é ObjectStream como parte do Java IO.

Detalhes relacionados ao Java IO e Java NIO podem ser encontrados em aqui.

2.1. Entrada e saída

O Java IO basicamente fornece um mecanismo para ler dados de uma fonte e gravar dados em um destino . A entrada representa a fonte, enquanto a saída representa o destino aqui.

Essas origens e destinos podem ser de arquivos, tubulações a conexões de rede.

2.2. Streams

O Java IO fornece o conceito de fluxos que basicamente representam um fluxo contínuo de dados . Os fluxos podem suportar muitos tipos diferentes de dados, como bytes, caracteres, objetos etc.

Além disso, a conexão com uma fonte ou um destino é o que um fluxo representa. Portanto, eles vêm como InputStream ou OutputStream, respectivamente.

3. Interfaces de OutputStream

OutputStream implementa um monte de interfaces que fornecem algum caractere distinto para suas subclasses. Vamos analisá-los rapidamente.

3.1. Closeable

A interface Closeable fornece um método chamado close () que trata do fechamento de uma origem ou de um destino de dados. Toda implementação de OutputStream deve fornecer uma implementação desse método. Aqui eles podem executar ações para liberar recursos.

3.2. AutoCloseable

A interface AutoCloseable também fornece um método chamado close () _ com comportamento semelhante ao de _Closeable. Nesse caso, no entanto, o método _close () _ é chamado automaticamente ao sair de um bloco try-with-resource.

Mais detalhes sobre o try-with-resource podem ser encontrados em https://www..com/java-try-with-resources [aqui].

3.3. Flushable

A interface Flushable fornece um método chamado _flush () _ que manipula a liberação de dados para um destino.

Uma implementação específica de OutputStream pode optar por armazenar em buffer os bytes escritos anteriormente para otimizar, mas uma chamada para _flush () _ faz com que seja gravado no destino imediatamente .

4. Métodos em OutputStream

OutputStream possui vários métodos que cada classe de implementação deve implementar para seus respectivos tipos de dados.

Esses são os métodos close () _ e _flush () _ que ele herda das interfaces _Closeable e Flushable.

4.1. _write (int b) _

Podemos usar esse método para escrever um byte específico no OutputStream . Como o argumento "int" compreende quatro bytes, como o contrato, apenas o primeiro byte de baixa ordem é gravado e os três bytes de alta ordem restantes são ignorados:

public static void fileOutputStreamByteSingle(String file, String data) throws IOException {
    byte[] bytes = data.getBytes();
    try (OutputStream out = new FileOutputStream(file)) {
        out.write(bytes[6]);
    }
}

Se chamarmos esse método com dados como "Hello World!", O que obtemos como resultado é um arquivo com o seguinte texto:

W

Esse, como podemos ver, é o sétimo caractere da sequência indexada em sexto.

4.2. _write (byte [] b, int desativado, int comprimento) _

Essa versão sobrecarregada do método write () _ existe para gravar uma sub-sequência da matriz de bytes no _OutputStream