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.

questionAnswers(1)

yourAnswerToTheQuestion