Uma classe java.io que age como ponte entre streams orientad...
Gabarito comentado
Confira o gabarito comentado por um dos nossos professores
A alternativa correta é a C - OutputStreamWriter.
A questão aborda um conceito importante no contexto de entrada e saída (I/O) em Java, que é a diferença entre streams orientadas a caractere e streams orientadas a byte. Para resolver questões como essa, é necessário compreender que em Java existem duas categorias principais de streams:
- Byte Streams: São usados para manipular fluxos de bytes brutos, como os de arquivos binários, e têm classes base como
InputStream
eOutputStream
. - Character Streams: São usados para manipular caracteres, levando em conta a codificação de caracteres e têm classes base como
Reader
eWriter
.
O OutputStreamWriter
é uma classe que faz a ponte entre essas duas categorias de streams: ele toma caracteres de um stream orientado a caracteres e os codifica em bytes para um stream orientado a bytes. Isso é especialmente útil quando você precisa escrever texto para uma saída que aceita apenas bytes, como um arquivo binário ou um socket de rede, garantindo a correta codificação dos caracteres para bytes.
As outras opções não realizam essa função específica:
ObjectOutputStream
é usado para escrever objetos em um OutputStream como um fluxo de bytes.ObjectStreamField
é uma classe auxiliar que descreve os campos de um objeto serializável.FileWriter
é uma subclasse deOutputStreamWriter
que já está vinculada a um arquivo, mas não é uma ponte entre caracter e byte streams.RandomAccessFile
permite ler e escrever a um arquivo em qualquer posição, mas não serve como ponte entre os dois tipos de streams mencionados.
Portanto, a OutputStreamWriter é a classe que realiza a função de converter caracteres em bytes, adequadamente codificados, e por isso é a resposta certa para a pergunta.
Clique para visualizar este gabarito
Visualize o gabarito desta questão clicando no botão abaixo
Comentários
Veja os comentários dos nossos alunos
Para fluxo de bytes temos as classes abstratas InputStream (entrada) e OutputStream (saída).
Algumas subclasses: BufferedInputStream, DataInputStream, BufferedOutputStream (...)
Para fluxo de caracteres temos, também classes abstratas, Writer e Reader.
Exemplos de subclasses: BufferedWriter e BufferedReader
Mnemônicamente podemos inferir que OutputStreamWriter ( OutputStream + Writer ) agregam as duas funcionalidades,isto é, recebe um fluxo de caracteres que são gravados em bytes com o enconding especificado.Na API:An OutputStreamWriter is a bridge from character streams to byte streams: Characters written to it are encoded into bytes using a specified charset
. The charset that it uses may be specified by name or may be given explicitly, or the platform's default charset may be accepted. A classe FileWriter é uma subclasse de OutputStreamWriter e ObjectOutputStream é uma subclasse de OutputStream.Só uma curiosidade:System.in é uma instância de InputStream. Já System.out e System.err são instâncias da classe PrintStream.
Clique para visualizar este comentário
Visualize os comentários desta questão clicando no botão abaixo