Hola
InputStream es una clase abstracta public abstract class InputStream con un método read() previsto para leer un byte de a cada vez desde un fichero
BufferedInputStream no es abstracta, es una clase concreta, por tanto puedes crear instancias de esta clase. Su método read devuelve un byte de a cada vez pero mantiene un buffer donde va acumulando los bytes internamente.
La clave en las clases que comienzan con Buffered es que usan un buffer, digamos que una memoria interna que normalmente hace que esas clases sean más eficientes, es decir, es esperable que BufferedInputStream sea más rápida que las otras implementaciones de InputStream. La idea sería: un InputStream normal tiene que estar llamando y accediendo al sistema operativo para cada byte que quiera devolver y esto consume cpu y es ineficiente. En cambio un BufferedInputStream llama al sistema operativo una vez y recolecta un array de bytes. Cuando se le pide read() ya no tiene que acceder al sistema operativo, sino que devuelve la información de su buffer interno. En algún momento el buffer interno se agota, pero mientras esto ocurre se han ahorrado un montón de procesos.
Salu2