Qual a diferença entre :
Scanner input = new Scanner(System.in);
e
BufferedReader x ;
x = new BufferedReader(new InputStreamReader(System.in))
Qual a diferença entre :
Scanner input = new Scanner(System.in);
e
BufferedReader x ;
x = new BufferedReader(new InputStreamReader(System.in))
Bom dia flavio, com relação ao Scanner input não sei te dizer, mas quando você usa o BufferedReader você consegui ler uma linha inteira digitada pelo usuário…
x.readLine();
[]'s
Com o Scanner você também consegue ler a linha inteira… Além de outros tipos de dados, como int, double, etc.
Algumas diferenças:
so para completar o que os colegas ai falou… a class Scanner ela serve para entrada de dados via teclado… veja:
import java.util.Scanner;
class Sca{
public static void main(String[]rar){
Scanner dados = new Scanner(System.in);
System.out.println("Digite um numero ");
//lendo o numero
int num = dados.nextInt();
System.out.println("o numero digitado " + num);
}
e a BufferedReader --> vc ler arquivo serializados… nao sei ti falar direito… mais acredito que seja isso…
BufferedReader é pra qualquer leitura utilizando buffer… Seja arquivo em disco, pacotes na rede , serialização e etc…
Já o scanner se nao me engano é especifico pra teclado
Se engana sim. Você pode usar o scanner para analisar qualquer tipo de input stream, inclusive arquivos, sockets, etc. Como ele busca por uma expressão regular, fica muito fácil manipular coisas que não sejam apenas o teclado…
Valeu vini… tava justamente procurando esse topico pra reportar meu erro. Estava dando uma revisada no scanner e vi que me enganei … valeu
Bem, teste aqui as duas utilizações e percebi o seguinte:
BufferedReader x = new BufferedReader(new InputStreamReader(System.in));
String entrada = x.readLine();
System.out.println(entrada);
Todo o texto digitado como entrada no código acima, indenpendente de haver espaços, números, Strings e outros caracteres, será impresso.
Scanner input = new Scanner(System.in);
System.out.println("Entre com um número: ");
int num = input.nextInt();
System.out.println("Você digitou: "+num);
Neste caso, se houver inteiros misturados com Strings, espaços, caracteres, etc., exceções serão lançadas.
Resumindo: no meu caso, utilizar BufferedReader… foi muito mais fácil e eficaz.
[ ]
oq acontece se vc tentar receber um int do BufferedReader escrevendo junto Strings??
Pessoal,
estava fazendo alguns testes de performance lendo arquivos utilizando:
BufferedReader arquivo = new BufferedReader(new FileReader("p2.in"));
e
Scanner sc = new Scanner(new File("p2.in"));
e utilizar BufferedReader se mostrou ser bem mais eficaz. Rodando o mesmo algoritmo os tempos foram:
Scanner: 2,031 ms
BufferedReader: 0,391 ms
Alguém sabe pq de toda essa diferença?
Como esse código é pra competições do estilo “Maratona da Programação”, essa diferença de tempo causa um “Time Limit exceed”. Ou seja, o programa é considerado errado.
Obrigado.
Não é o Scanner que é problemático, é o BufferedReader que é mais rápido.
Se você passar um BufferedReader ao construtor de Scanner ( veja no Javadoc ) , em vez de passar um mero File, vai ver que seu benchmark vai ficar mais rápido.
[quote=thingol]Não é o Scanner que é problemático, é o BufferedReader que é mais rápido.
Se você passar um BufferedReader ao construtor de Scanner ( veja no Javadoc ) , em vez de passar um mero File, vai ver que seu benchmark vai ficar mais rápido.
[/quote]
Fala Thingol,
eu fiz a alteração que você sugeriu:
Scanner sc = new Scanner(new BufferedReader(new FileReader("p2.in")));
mas a performance do Scanner continua beeeeeem inferior a se usar apenas o BufferedReader.
Tempo: 2,062 ms
[quote]Fala Thingol,
eu fiz a alteração que você sugeriu:
view plaincopy to clipboardprint?
Scanner sc = new Scanner(new BufferedReader(new FileReader(“p2.in”)));
Scanner sc = new Scanner(new BufferedReader(new FileReader(“p2.in”)));
mas a performance do Scanner continua beeeeeem inferior a se usar apenas o BufferedReader.
Tempo: 2,062 ms
[/quote]
sim porque vc colocou dentro do scanner tenta
BufferedReader br = new BufferedReader(new FileReader("p2.in"));