¿Más rápido que el escáner o el BufferedReader leyendo datos de varias líneas de STDIN?

Nota: Actualmente estoy codificando en Java. Estoy buscando leer datos de entrada en una cadena, una línea a la vez (o más), y espero muchas líneas totales.

Ahora mismo he implementado

scanner in = new Scanner(System.in)
while (in.hasNextLine()) {
    separated = in.nextLine().split(" ");
    ...
}

porque dentro de la línea mis entradas están delimitadas por espacios.

Desafortunadamente, con millones de líneas, este proceso es MUY lento y el escáner está tomando más tiempo que mi procesamiento de datos, así que busqué en las bibliotecas java.io y encontré muchas posibilidades y no estoy seguro de cuál usar ByteArrayInputStream, FileInputStream, BufferedInputStream, PipedInputStream). ¿Cuál debo usar?

Para especificar, mis datos se están canalizando desde un archivo de texto, cada línea tiene 4 o 6 palabras terminadas con un carácter de nueva línea, y necesito analizar una línea a la vez, estableciendo las (4 o 6) palabras en un matriz que puedo administrar temporalmente. Formato de datos

392903840 a c b 293 32.90
382049804 a c 390
329084203 d e r 489 384.90
...

¿Hay alguna forma en que el escáner pueda leer aproximadamente 1000 líneas a la vez y volverse eficiente o cuál de estos tipos de datos debo usar (para minimizar la velocidad)?

Sidenote: mientras experimentaba he intentado:

java.io.BufferedReader stdin = new java.io.BufferedReader(new java.io.InputStreamReader(System.in));
while(in.ready()){
    separated = in.readLine().split(" ");
    ...
}

Lo que funcionó bien, solo preguntándome cuál funciona mejor, y si hay alguna forma de, por ejemplo, leer 100 líneas en los datos a la vez y luego procesar todo. Demasiadas opciones buscando la solución óptima.

Respuestas a la pregunta(1)

Su respuesta a la pregunta