((bytesRead > 0) && (bytesRead == 1024))
, кажется, проблема здесь.
Запрос операции чтения для 1024 байтов не гарантирует, что вы получите 1024 байта.
Вы можете получить любое количество байтов между 0 и 1024 (0 означает конец передачи), и когда это так, (допустим, буфер чтения имеет только 768 байт), вы просто прекращаете чтение.
Итак, если это произойдет, когда половина файла будет получена (все считано 1024 байта), у вас не будет оставшейся половины и вы сохраните полученную информацию.
Пожалуйста, измените это:
while (bytesRead > 0);