Предполагая, что вы можете полагаться на то, что файл не изменяется, я бы прочитал файл один раз и вычислил хеш MD5, установил его в качестве заголовка, а затем записал файл как полное тело.Это, вероятно, будет проще для клиента, чем разделение тела на две части.
Если файл достаточно мал, вы можете записать его в ByteArrayOutputStream
во время чтения / хэширования, чтобы избежатьчтобы прочитать его дважды - но если файл большой, вы, вероятно, не захотите принять этот удар памяти.
Другой вариант - сохранить хеш в файловой системе - сделать что-нибудь запись файл в первую очередь отвечает за его хеширование.Таким образом, вам нужно всего лишь один раз его хешировать;вы всегда можете хешировать его, когда читаете его, чтобы проверить хеш, если это необходимо.