Mais rápido do que o Scanner ou o BufferedReader lendo os dados de várias linhas do STDIN?
Nota: Atualmente, estou codificando em java. Eu estou olhando para ler dados de entrada em uma string, uma linha de cada vez (ou mais), e espero muitas linhas totais.
Agora eu implementei
scanner in = new Scanner(System.in)
while (in.hasNextLine()) {
separated = in.nextLine().split(" ");
...
}
porque dentro da linha minhas entradas são delimitadas por espaço.
Infelizmente, com milhões de linhas, esse processo é MUITO lento e o scanner está demorando mais do que o processamento de dados. Pesquisei nas bibliotecas java.io e encontrei várias possibilidades e não tenho certeza de qual usar (ByteArrayInputStream
, FileInputStream
, BufferedInputStream
, PipedInputStream
) Qual devo usar?
Para especificar, meus dados estão sendo canalizados a partir de um arquivo de texto, todas as linhas têm 4 ou 6 palavras terminadas por um caractere de nova linha e preciso analisar uma linha por vez, definindo as (4 ou 6) palavras em uma matriz que eu posso gerenciar temporariamente. Formato de dados:
392903840 a c b 293 32.90
382049804 a c 390
329084203 d e r 489 384.90
...
Existe uma maneira em que o scanner possa ler mais ou menos 1000 linhas por vez e se tornar eficiente ou qual desses tipos de dados devo usar (para minimizar a velocidade)?
Sidenote: ao experimentar, tentei:
java.io.BufferedReader stdin = new java.io.BufferedReader(new java.io.InputStreamReader(System.in));
while(in.ready()){
separated = in.readLine().split(" ");
...
}
O que funcionou bem, apenas imaginando qual funciona melhor e, se houver alguma maneira de, digamos, ler 100 linhas em dados de uma só vez, processe tudo. Muitas opções procurando a solução ideal.