Deberías utilizar streams de caracteres cuando estés trabajando con, caracteres. Si estás construyendo String, o comparando caracteres literales, estarás trabajando con caracteres. Por supuesto, existen excepciones. Por ejemplo, muchos protocolos de red, están definidos en términos de bytes que contienen caracteres ASCII de 7 bits, por eso puedo tener sentido comparar bytes desde un stream de bytes con caracteres literales.
Los streams de bytes son el principio primitivo por el que Java hacia la I/O, bien sobre fichero o sobre la red. Todavía son útiles en muchas cosas: almacenar y recuperar imágenes y sonidos, serializar y des-serializar objetos, escribir ficheros de datos binarios para utilizarlos en otros programas, e implementar protocolos de red (existen muchos más).
Sin embargo, en la mayoría de los casos es mejor utilizar streams de caracteres.
Las nuevas clases son:
Los nuevos interfaces son:
Para más información sobre los nuevos clases de streams de caracteres e interfaces, puedes ver la página Streams de Caracteres en el JDK 1.1 en la site de Sun.