Ich habe eine Binärdatei, die ich brauche, um einen Bereich von Bytes aus zu extrahieren: start: Long
- end: Long
. Ich brauche Long
, weil es mehrere Gigagbytes gibt. Meine App muss das Ergebnis als ByteString
zurückgeben. Ich habe versucht,Extrahieren Bereich von Bytes aus Datei in Scala
val content: Array[Byte] = Array()
val stream: FileInputStream = new FileInputStream(file: File)
stream.skip(start)
stream.read(content, 0, end-start)
aber schon kann ich nicht Long
in read
verwenden, nur Int
(ist das ein Fehler? skip
ok ist mit Long
...). Außerdem müsste ich das Ergebnis in ByteString
konvertieren. Ich würde auch gerne das tun:
val stream: FileInputStream = new FileInputStream(file: File)
stream.skip(start)
org.apache.commons.io.IOUtils.toByteArray(stream)
aber wie kann ich sagen, wo zu Ende? stream
hat keine Methode takeWhile
oder take
. Dann habe ich versucht
val source = scala.io.Source.fromFile(file: File)
source.drop(start).take(end-start)
Wieder nur Int
in drop
...
Wie kann ich das tun?
http://stackoverflow.com/questions/28883876/can-i-do-a-lazy-take-with-a-long-parameter –
Damit war ich: Stattdessen sollten Sie so etwas wie tun versuchen, eine korrekte Antwort auf eine Byte-Range-Anfrage in Play zu implementieren, aber seit kurzem scheint Play das implementiert zu haben, und dokumentiert es in "Mit öffentlichen Ressourcen arbeiten" ... – JulienD