1
resposta

Dúvida sobre o Writer e BufferedWriter

Boa noite,

Na aula https://cursos.alura.com.br/course/java-trabalhando-com-io/task/39739 o professor mostra o BufferedWriter bw = new BufferedWriter(osw); ou seja o bw.write(linha); para saida de dados, porém em testes que realizei também consegui somente usando o Writer osw = new OutputStreamWriter(fos); ou seja com o osw.write(linha); então porque ter que criar mais uma linha de código para usar o Buffered?

Outra dúvida seria com relação ao uso do bw.newLine(); não seria mais interessante usar bw.write(linha+"\n") ou no caso do meu teste o osw.write(linha+"\n")?

1 resposta

Olá Wagner, tudo bem com você?

Peço desculpas na demora para obter retorno.

A classe BufferedWriter usa um buffer em seu funcionamento na hora de escrever, ao contrário da classe OutputStreamWriter. Na prática, o buffer guarda 'chunks' ou pedaços da saída e despeja eles todos de uma vez, ao não ser que tenha leitura de entrada de dados do usuário, nesse caso a cada leitura ele fará a saída.

Beleza, mas qual o ganho de se utilizar um buffer?

O buffer traz ganho em desempenho na hora de escrever caracteres, arrays e strings. Como assim? Vamos imaginar a não utilização de um buffer: a cada string escrita, é feito todo o processo de codificação em um charset e escrita. Para uma string ou duas pode não trazer quedas de desempenho, mas vamos imaginar um fluxo de dado de um milhão de strings por exemplo. Nesse caso, o aumento no número de operações vai trazer queda significativa no desempenho, enquanto com um buffer, vai ser aberta a codificação uma vez, o buffer vai guardar as um milhão de strings e jogar para a saída uma única vez, trazendo ganho de performance.

Quanto ao método newLine() da classe BufferedWriter, ele traz a portabilidade para pular linhas. O caractere especial '\n' é muito interessante também na hora de pular linhas, mas não é adotado universalmente por todos os sistemas como quebra de linha, existem sistemas que fazem apenas a troca de linha com o caractere '\n', mas não voltam para o inicio de linha, causando efeitos indesejados. O método newLine() garante que a quebra de linha seja feita corretamente independente do sistema utilizado, sendo assim, uma opção mais segura.

Fico à disposição.

Um grande abraço e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!