akka-http — Составная часть/Размер пакета потока FromData

#scala #akka-stream #akka-http

#scala #акка-стрим #акка-http

Вопрос:

Я получаю a Multipart/FromData в качестве сервера. Этот запрос содержит Source[Multipart.FormData.BodyPart, Any] , и каждый Multipart.FormData.BodyPart содержит Source[ByteString, Any] внутри. Я могу установить размер буфера. Но это измеряется количеством элементов. Как я могу рассчитать размер каждого элемента ByteString(размер пакета)? Мне нужно рассчитать весь размер буфера в байтах.

 entity(as[Multipart.FormData]) { formData =gt;   formData  .parts // Source[Multipart.FormData.BodyPart, Any]  .flatMap { bodyPart =gt;   bodyPart.entity.dataBytes.buffer(???, OverflowStrategy.backpressure) // Source[ByteString, Any]  } }  

Комментарии:

1. Пожалуйста, добавляйте scala теги к своим вопросам в будущем. Akka может использоваться как в java, так и в scala. Таким образом, этот тег является обязательным

Ответ №1:

Неясно, какова здесь мотивация, но buffer двоюродный batchWeighted брат, скорее всего, будет тем, чего вы хотите.

 bodyPart.entity.dataBytes  .batchWeighted[ByteString](  max = 1024, // bytes  costFn = { bs: ByteString =gt; bs.length },  seed = { _: Any =gt; ByteString.empty }  ) { _    _ }  

(Не проверял это: мой мысленный компилятор говорит: «Выглядит хорошо!»)