Существует ограничение на количество отправляемых с каждой операцией отправки (все они должны быть отправлены, но не в одном и том же пакете), что означает, что один вызов read не получит их всех.
Я бы начал с отправки общего количества отправленных байтов, за которым следуют фактические данные.
На принимающей стороне просто добавляйте входящие данные в ByteArray до тех пор, пока не будет прочитано достаточно.