Habría que ver cómo tienes el código y todo eso, pero te comento varias ideas.
- Para leer el fichero utiliza algo que use BufferedInputStream. Si lees un fichero sin Buffered, cada vez que lees se realiza una lectura real en disco. Si utilizas el Buffered, se lee de golpe un cacho grande de fichero. El resultado es una lectura más rápida.
- Si tu separador siempre es |, posiblemente sea más rápido si los buscas tú con un bucle que usar el StringTokenizer.
- Otro consejo. Los StringBuffer son más rápidos en general que los String.
De todas formas, yo creo que lo más determinante en tiempo, si no lo estás usando ya, es el BufferedInputStream o si no, leer tú varios kBytes de fichero de golpe (de una sola lectura) y luego ir analizándolos.
Se bueno.