Ese codigo no es correcto
, ya que read() no asegura leer todo de golpe y available solo te devuelve el numero de bytes que podras leer sin tener que esperar por operaciones de I/O, lo cual varia segun la carga del S.O.
Así que así no puedes asegurar que lees el fichero completo. Si el fichero es pequeño y el S.O. no esta muy ocupado... quizá.
S!