De primeras, envuelve el InputStream en un InputStreamReader que se encarga de la decodificación de texto.
InputStreamReader reader = new InputStreamReader(input, "UTF-8");
Y usa el reader en vez del input en todos los sitios.
Por supuesto, asegúrate de que el fichero txt está codificado en UTF-8
EDIT: El buffer en vez de byte[] es de tipo char[], usar byte es problemático con las codificaciones, char es seguro porque son caracteres independientes de la codificación