Pergunta

Até eu sei, os dois métodos mais comuns de leitura de dados baseados em caracteres a partir de um arquivo em Java está usando Scanner ou BufferedReader. Sei também que o BufferedReader ler arquivos eficientemente usando um tampão para evitar operações de disco físico. Minhas perguntas são:

  • executa Scanner faz tão bem como BufferedReader?
  • Por que você escolher Scanner sobre BufferedReader ou vice-versa?
Foi útil?

Solução

Scanner é usado para analisar os tokens a partir do conteúdo do fluxo, enquanto BufferedReader apenas lê o fluxo e não faz qualquer análise especial.

Na verdade, você pode passar um BufferedReader a um scanner como a fonte de caracteres para análise.

Outras dicas

No momento mais recente JDK6 versão / build (B27), a Scanner tem um tampão de menor ( 1024 caracteres ), em oposição à BufferedReader ( 8192 caracteres ), mas é mais do que suficiente.

Quanto à escolha, use o Scanner se você quiser parse o arquivo, use o BufferedReader se você quiser ler o arquivo linha por linha. ver também o texto introdutório de suas documentações de API aforelinked.

  • de análise = interpretar a entrada dado como fichas (partes). É capaz de dar a volta você partes específicas diretamente como int, corda, decimal, etc. Veja também todos esses métodos nextXxx() na classe Scanner.
  • Leitura = streaming de burro. Ele continua devolvendo-lhe todos os personagens, que você, por sua vez têm para inspecionar manualmente se você gostaria de combinar ou algo compor útil. Mas se você não precisa fazer isso de qualquer maneira, então a leitura é suficiente.

Veja este ligação , seguinte é citado de lá:

A BufferedReader é uma classe simples destina-se a eficiência ler a partir do fluxo de subalterno. Geralmente, cada solicitação de leitura feita de um leitor como um FileReader faz com que uma solicitação de leitura correspondente a ser feito para fluxo subjacente. Cada invocação de read () ou readLine () poderia causa bytes a ser lido a partir do arquivo, convertida em caracteres, e em seguida, devolvido, o que pode ser muito ineficiente. A eficiência é melhorada apreciavelmente Se um leitor está deformado em um BufferedReader.

BufferedReader é sincronizado, assim que ler operações em um BufferedReader pode seguramente ser feito a partir de vários segmentos.

Um scanner por outro lado tem muito mais queijo incorporada; isto pode fazer tudo o que um BufferedReader pode fazer e ao mesmo nível de eficiência bem. No entanto, além de um Scanner pode analisar a subjacente fluxo de tipos primitivos e strings usando regulares expressões. Ele também pode tokenizar o fluxo subjacente com o delimitador de sua escolha. Ele também pode fazer a digitalização para a frente do subjacente fluxo desconsiderando o delimitador!

Um scanner no entanto, não é thread-safe, que tem que ser externamente sincronizada.

A escolha de usar um BufferedReader ou um scanner depende do código você está escrevendo, se você estiver escrevendo um leitor de log simples Buffered leitor é adequada. No entanto, se você estiver escrevendo um Scanner parser XML é a escolha mais natural.

Mesmo ao ler a entrada, se quiser aceitar linha de entrada do usuário por linha e dizer basta adicioná-la a um arquivo, um BufferedReader é bom o suficiente. Por outro lado, se você quer aceitar a entrada do usuário como um comando com várias opções e, em seguida pretende executar operações diferentes baseado no comando e opções especificado, um scanner irá atender melhor.

  1. BufferedReader tem significativamente maior memória buffer de Scanner. Use BufferedReader se você deseja obter longas seqüências de um fluxo e uso Scanner se você quiser analisar tipo específico de sinal de um córrego.

  2. Scanner pode usar tokenize usando delimitador personalizado e analisar o fluxo em tipos primitivos de dados, enquanto BufferedReader só pode ler e armazenar cadeia.

  3. BufferedReader é síncrono enquanto Scanner não é. Use BufferedReader se você estiver trabalhando com vários segmentos.

  4. Scanner peles IOException enquanto BufferedReader lança-lo imediatamente.

Eu sugiro usar BufferedReader para leitura do texto. couros Scanner IOException enquanto BufferedReader lança-lo imediatamente.

Diferença entre BufferedReader e Scanner são os seguintes:

  1. BufferedReader é sincronizados , mas Scanner é não sincronizada .
  2. BufferedReader é segmento seguro , mas Scanner é não thread-safe .
  3. BufferedReader tem maior memória buffer , mas Scanner tem memória buffer menor .
  4. BufferedReader é mais rápido , mas Scanner é mais lento na execução .
  5. código para ler uma linha do console:

    BufferedReader :

     InputStreamReader isr=new InputStreamReader(System.in);
     BufferedReader br= new BufferedReader(isr);
     String st= br.readLine();
    

    Scanner :

    Scanner sc= new Scanner(System.in);
    String st= sc.nextLine();
    

A seguir estão as diferenças entre BufferedReader e Scanner

  1. BufferedReader somente leitura dados, mas scanner também dados de análise.
  2. você só pode ler String usando BufferedReader, mas você pode ler int, longo ou flutuar usando Scanner.
  3. BufferedReader é mais velho do scanner, que existe desde JDK 1.1, enquanto Scanner foi adicionado no JDK 5 lançamento.
  4. o tamanho do buffer de BufferedReader é grande (8 KB), em comparação com 1 KB de Scanner.
  5. BufferedReader é mais adequado para arquivo de leitura com longa seqüência enquanto Scanner é mais adequado para entrada de leitura pequeno usuário prompt de comando.
  6. BufferedReader é sincronizado mas Scanner não é, o que significa que você Não é possível compartilhar Scanner entre os vários segmentos.
  7. BufferedReader é mais rápido que Scanner porque ele não passou tempo na análise
  8. BufferedReader é um pouco mais rápido em comparação com Scanner
  9. BufferedReader é do pacote java.io e Scanner é do pacote java.util com base nos pontos podemos escolher a nossa escolha.

Graças

As principais diferenças:

  1. Scanner

  • Um scanner de texto simples que pode analisar tipos primitivos e strings usando expressões regulares.
  • A Scanner quebra sua entrada em tokens usando um padrão delimitador, que por padrão corresponde espaços em branco. Os sinais resultantes podem em seguida ser convertidos em valores de tipos diferentes, utilizando os vários métodos seguintes.

Exemplo

 String input = "1 fish 2 fish red fish blue fish";
 Scanner s = new Scanner(input).useDelimiter("\\s*fish\\s*");
 System.out.println(s.nextInt());
 System.out.println(s.nextInt());
 System.out.println(s.next());
 System.out.println(s.next());
 s.close(); 

imprime o seguinte resultado:

 1
 2
 red
 blue 

A mesma saída pode ser gerado com este código, que usa uma expressão regular para analisar todas as quatro fichas de uma vez:

 String input = "1 fish 2 fish red fish blue fish";

 Scanner s = new Scanner(input);
 s.findInLine("(\\d+) fish (\\d+) fish (\\w+) fish (\\w+)");
 MatchResult result = s.match();
 for (int i=1; i<=result.groupCount(); i++)
     System.out.println(result.group(i));
 s.close(); `


  1. BufferedReader:

    • Lê o texto de um fluxo de caracteres de entrada, tamponamento personagens de modo a proporcionar para a leitura eficiente de caracteres, matrizes e linhas.

    • O tamanho do buffer pode ser especificado, ou podem ser usados ??o tamanho padrão. O padrão é grande o suficiente para a maioria dos propósitos.

Em geral, cada solicitação de leitura feita de um leitor faz com que um pedido de leitura correspondente a ser feita do caráter ou byte fluxo subjacente. Portanto, é aconselhável para embrulhar um BufferedReader em torno de qualquer leitor cuja read () operações podem ser caros, como FileReaders e InputStreamReaders. Por exemplo,

BufferedReader in
   = new BufferedReader(new FileReader("foo.in"));

vai tamponar a entrada do arquivo especificado. Sem tamponamento, cada chamada de leitura () ou readLine () poderia causar bytes a serem lidos a partir do ficheiro, convertido em caracteres, e, em seguida, devolvido, o que pode ser muito ineficiente. Programas que usam DataInputStreams para entrada de texto podem ser localizadas através da substituição de cada DataInputStream com um BufferedReader apropriada.

Fonte: Fazer a ligação

Existem diferentes maneiras de tomar entrada em java como:

1) BufferedReader 2) Scanner 3) Argumentos de linha de comando

BufferedReader ler o texto a partir de um fluxo de caracteres de entrada, tamponamento personagens de modo a proporcionar para a leitura eficiente de caracteres, matrizes e linhas.

Onde é um scanner de texto simples que pode analisar tipos primitivos e strings usando expressões regulares.

Se você está escrevendo um leitor de log simples leitor Buffered é adequada. se você estiver escrevendo um analisador XML Scanner é a escolha mais natural.

Para obter mais informações, consulte:

http://java.meritcampus.com/t/240/Bufferedreader? tc = mm69

A resposta abaixo é tirado de Leitura de Console: JAVA Scanner vs BufferedReader

Ao ler uma entrada do console, há duas opções existe para conseguir isso. Primeiro usando Scanner, outro usando BufferedReader. Ambos têm características diferentes. Significa diferenças como usá-lo.

Scanner tratados dada entrada como token. BufferedReader linha apenas lido por linha dada entrada como string. Scanner auto fornecer análise de capacidades assim como nextInt (), nextFloat ().

Mas, o que é outras diferenças entre os dois?

  • Scanner tratados dado entrada como token. BufferedReader como linha de fluxo / String
  • Scanner tokenized dada entrada usando regex. Usando BufferedReader deve escrever código extra
  • BufferedReader mais rápido do Scanner * ponto não. 2
  • Scanner não está sincronizado, BufferedReader sincronizados

Scanner vêm com desde JDK versão 1.5 superior.

Quando deve usar Scanner, ou Protegido Reader?

Olhe para as principais diferenças entre os dois, um usando tokenized, outros usando linha de fluxo. Quando você precisa analisar recursos, use Scanner vez. Mas, eu sou mais confortável com BufferedReader. Quando você precisa ler a partir de um arquivo, o uso BufferedReader, porque o buffer do seu uso, quando ler um arquivo. Ou você pode usar BufferedReader como entrada para Scanner.

  1. BufferedReader provavelmente irá dar-lhe um melhor desempenho (porque Scanner é baseado em InputStreamReader, fontes olhar). ups, para leitura de arquivos que usa nio. Quando eu testei desempenho nio contra o desempenho BufferedReader para grandes arquivos nio apresenta um desempenho pouco melhor.
  2. Para ler a partir de tentativa arquivo Apache Commons IO.

Eu prefiro Scanner porque não lançar exceções verificadas e, portanto, é de uso resulta em um código mais simplificado.

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