Pergunta

Qual é a diferença entre usar um BufferedReader em torno da StringReader no código a seguir vs usando apenas o StringReader? Ao carregar o DOM na linha 2 de ambos os exemplos, parece que o BufferedReader não é necessário?

    InputSource is = new InputSource(new StringReader(html));
    Document dom = XMLResource.load(is).getDocument();

VS

    InputSource is = new InputSource(new BufferedReader(new StringReader(html)));
    Document dom = XMLResource.load(is).getDocument();
Foi útil?

Solução

Neste caso particular, não vejo nenhum benefício. Em geral, existem dois benefícios:

  • A oh-so-handy método readLine() só é definida em BufferedReader em vez de Reader (irrelevante aqui)
  • BufferedReader reduz IO onde as chamadas individuais para o leitor subjacente são potencialmente caro (ou seja, menos chamadas de grossas são mais rápidos do que muitos pequenos) - novamente, irrelevantes para StringReader

Recortar e colar falhar?

Outras dicas

EDIT: Minha resposta original abaixo. O abaixo não é relevante neste caso, uma vez que o leitor tamponada está envolvendo um StringReader, que envolve uma String. Portanto, não há buffer a ser executada, eo BufferedReader parece ser redundante. Você pode fazer um argumento para usar as melhores práticas / consistentes, mas seria muito tênue.

Possivelmente o resultado de um copy / paste, ou talvez um refactor-driven IDE longe demais!

BufferedReader tentará ler de uma forma mais ideal.

Isto é, ele irá ler pedaços maiores de dados de uma só vez (em uma quantidade configurável), e, em seguida, tornar disponível, conforme necessário. Isto irá reduzir o número de leituras do disco (etc.) à custa de algum uso de memória.

Para citar o Javadoc:

Em geral, cada solicitação de leitura feita de um leitor faz uma leitura correspondente pedido para ser feita do subjacente caracteres ou fluxo de bytes. Isto é portanto, aconselhável para embrulhar um BufferedReader em torno de qualquer leitor cuja ler () operações podem ser caros, tais como FileReaders e InputStreamReaders

A versão BufferedReader foi copiado de algum código que é utilizado para ler a partir de um FileReader?

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top