Con lo de usar un buffer fijo, no me referia a un buffer grande para almacenar lo que vas a recibir, eso es ineficiente. A lo que me referia es a un buffer pequeño unica y exclusivamente
para usar en el read(...).
Ya puestos, puedes usar un BufferedInputStream que ademas aumentará el rendimiento llamandote al read solo cuando haya suficientes datos para evitar micro-llamadas.
La mayoría de ejemplos usan BufferedReader, como por ejemplo:
http://dn.codegear.com/article/31995
pero eso es por que envian cadenas de caracteres, no contenido binario puro.
S!