Até onde eu sei, os dois métodos mais comuns de leitura de dados baseados em caracteres de um arquivo em Java estão usando Scanner
or BufferedReader
. Sei também que os BufferedReader
arquivos de leitura são eficientemente usando um buffer para evitar operações no disco físico.
Minhas perguntas são:
- Funciona
Scanner
tão bem quantoBufferedReader
? - Por que você escolher
Scanner
sobreBufferedReader
ou vice-versa?
java
file-io
java.util.scanner
bufferedreader
Mads Mobæk
fonte
fonte
Respostas:
Scanner
é usado para analisar tokens do conteúdo do fluxo enquantoBufferedReader
apenas lê o fluxo e não faz nenhuma análise especial.Na verdade, você pode passar a
BufferedReader
para ascanner
como a fonte dos caracteres a serem analisados.fonte
Scanner
, em última análise, depende de outra coisa para sua entrada, que pode muito bem ser sincronizada.Na versão / compilação mais recente do JDK6 (b27) atualmente, o
Scanner
possui um buffer menor ( 1024 caracteres ) em oposição aosBufferedReader
( 8192 caracteres ), mas é mais que suficiente.Quanto à escolha, use o
Scanner
se você deseja analisar o arquivo, use oBufferedReader
se você quiser ler o arquivo linha por linha. Consulte também o texto introdutório de suas documentações da API acima mencionadas.nextXxx()
métodos naScanner
classe.fonte
readInt();
readFloat (); Agora, entendi o que é o meio de analisar. e BalusC, você pode me dar pouco tempo apenas 10 minutos na sala de bate-papo, quero perguntar um pouco sobre o buffer, como ele funciona.BufferedReader
no construtor do Scanner? isso é uma boa ideia?Scanner
O buffer do será expandido conforme necessário para a correspondência de padrões. Portanto, se você deseja um buffer maior, basta invocar, por exemplofindWithinHorizon("\\z", 8192)
, nele e depois, ele usará um buffer com capacidade de8192
caracteres (ou o arquivo inteiro, se for menor que isso).Veja este link , a seguir é citado a partir daí:
fonte
BufferedReader
possui memória buffer significativamente maior que o Scanner. UseBufferedReader
se desejar obter seqüências longas de um fluxo e useScanner
se desejar analisar um tipo específico de token de um fluxo.Scanner
pode usar tokenize usando delimitador personalizado e analisar o fluxo em tipos primitivos de dados, enquantoBufferedReader
só pode ler e armazenar String.BufferedReader
é síncrono enquantoScanner
não é. UseBufferedReader
se você estiver trabalhando com vários threads.Scanner
oculta IOException enquantoBufferedReader
lança imediatamente.fonte
Eu sugiro usar
BufferedReader
para ler texto.Scanner
escondeIOException
enquantoBufferedReader
joga imediatamente.fonte
As diferenças entre o BufferedReader e o Scanner são as seguintes:
Código para ler uma linha do console:
BufferedReader :
Scanner :
fonte
A seguir, estão as diferenças entre o BufferedReader e o Scanner
obrigado
fonte
As principais diferenças:
Exemplo
imprime a seguinte saída:
A mesma saída pode ser gerada com esse código, que usa uma expressão regular para analisar todos os quatro tokens de uma vez:
BufferedReader:
Lê texto de um fluxo de entrada de caracteres, armazenando em buffer caracteres para fornecer uma leitura eficiente de caracteres, matrizes e linhas.
O tamanho do buffer pode ser especificado ou o tamanho padrão pode ser usado. O padrão é grande o suficiente para a maioria dos propósitos.
Em geral, cada solicitação de leitura feita de um Reader faz com que uma solicitação de leitura correspondente seja feita do fluxo de caracteres ou bytes subjacente. Portanto, é aconselhável envolver um BufferedReader em qualquer leitor cujas operações read () possam ser caras, como FileReaders e InputStreamReaders. Por exemplo,
armazenará em buffer a entrada do arquivo especificado. Sem buffer, cada chamada de read () ou readLine () pode fazer com que os bytes sejam lidos no arquivo, convertidos em caracteres e retornados, o que pode ser muito ineficiente. Os programas que usam DataInputStreams para entrada de texto podem ser localizados substituindo cada DataInputStream por um BufferedReader apropriado.
Fonte: Link
fonte
Existem diferentes maneiras de obter entrada em java como:
1) BufferedReader 2) Scanner 3) Argumentos da linha de comando
BufferedReader Leia o texto de um fluxo de entrada de caracteres, armazenando em buffer caracteres para fornecer uma leitura eficiente de caracteres, matrizes e linhas.
Onde Scanner é um scanner de texto simples que pode analisar tipos e cadeias primitivas usando expressões regulares.
se você estiver escrevendo um simples leitor de log, o leitor em buffer é adequado. se você estiver escrevendo um analisador de analisador XML, é a escolha mais natural.
Para mais informações, consulte:
http://java.meritcampus.com/t/240/Bufferedreader?tc=mm69
fonte
A resposta abaixo é retirada de Reading from Console: JAVA Scanner vs BufferedReader
Ao ler uma entrada do console, existem duas opções para isso. Primeiro usando
Scanner
, outro usandoBufferedReader
. Ambos têm características diferentes. Significa diferenças em como usá-lo.O scanner tratou a entrada fornecida como token. BufferedReader apenas lê linha por linha, como entrada. O scanner fornece recursos de análise assim como nextInt (), nextFloat ().
Mas, quais são as outras diferenças entre eles?
O scanner vem desde o JDK versão 1.5 superior.
Quando deve usar o Scanner ou o Buffered Reader?
Observe as principais diferenças entre os dois: um usando token e outros usando a linha de fluxo. Quando você precisar de recursos de análise, use o Scanner. Mas, eu estou mais confortável com o BufferedReader. Quando você precisar ler um arquivo, use BufferedReader, porque é usar buffer ao ler um arquivo. Ou você pode usar o BufferedReader como entrada para o Scanner.
fonte
O BufferedReader provavelmente fornecerá um melhor desempenho (porque o Scanner é baseado no InputStreamReader, procure fontes).ups, para ler arquivos que usa o nio. Quando testei o desempenho do nio contra o desempenho do BufferedReader para arquivos grandes, o nio mostra um desempenho um pouco melhor.fonte
Eu prefiro
Scanner
porque ele não lança exceções verificadas e, portanto, o uso resulta em um código mais simplificado.fonte