public class BufferSizeDetector extends BufferedInputStream {
public static void main(String[] args) {
BufferSizeDetector bsd = new BufferSizeDetector(null);
O seu código lê perfeitamente um arquivo de um milhão de linhas sem problemas. Por isso, não é o problema do BufferedWriter.
Você está é com algum outro problema que você não imprimiu no stack trace (por exemplo, se você está rodando esse programa sob o Eclipse, ele tem um limite para a quantidade de dados que consegue mostrar no console). Só para comprovar isso, estou postando seu programa modificado, que lê um arquivo e imprime o número de linhas lidas. Testei com um arquivo que tinha 2.773.064 linhas.
import java.io.*;
public class ContadorLinhas {
public static void main(String[] args){
try {
BufferedReader in = new BufferedReader(new FileReader(args[0]));
String str;
long nLinhas = 0;
while((str = in.readLine()) != null){
nLinhas++;
}
in.close();
System.out.printf ("Numero de linhas: %d %n", nLinhas);
}
catch (IOException e){
e.printStackTrace(); // pelo menos imprima o stack trace !
}
System.exit(0);
}
}