У меня есть двоичный файл, который мне нужно извлечь из диапазона: start: Long
- end: Long
. Мне нужно Long
, потому что есть несколько гигагбайт. Мое приложение должно вернуть результат как ByteString
. Я попыталсяИзвлечь диапазон байтов из файла в Scala
val content: Array[Byte] = Array()
val stream: FileInputStream = new FileInputStream(file: File)
stream.skip(start)
stream.read(content, 0, end-start)
, но я уже не могу использовать Long
в read
, только Int
(это ошибка? skip
нормально с Long
...). Также мне нужно будет преобразовать результат в ByteString
. Я тоже хотел бы это сделать:
val stream: FileInputStream = new FileInputStream(file: File)
stream.skip(start)
org.apache.commons.io.IOUtils.toByteArray(stream)
но как я могу сказать, где остановиться? stream
не имеет способа takeWhile
или take
. Тогда я попытался
val source = scala.io.Source.fromFile(file: File)
source.drop(start).take(end-start)
Опять же, в drop
только Int
...
Как я могу сделать это?
http://stackoverflow.com/questions/28883876/can-i-do-a-lazy-take-with-a-long-parameter –
С этим я был пытаясь реализовать правильный ответ на запрос байтового диапазона в Play, но с недавнего времени Play, похоже, реализовал это и документирует его в «Работа с публичными активами» ... – JulienD