logo scala bytearray inputstream

logo - Scala: InputStream a Matriz



hbase (9)

Aquí hay un enfoque usando scalaz-stream:

import scalaz.concurrent.Task import scalaz.stream._ import scodec.bits.ByteVector def allBytesR(is: InputStream): Process[Task, ByteVector] = io.chunkR(is).evalMap(_(4096)).reduce(_ ++ _).lastOr(ByteVector.empty)

Con Scala, ¿cuál es la mejor manera de leer desde un InputStream a un bytearray?

Veo que puede convertir un InputStream en una matriz char

Source.fromInputStream(is).toArray()


Con Scala IO , esto debería funcionar:

def inputStreamToByteArray(is: InputStream): Array[Byte] = Resource.fromInputStream(in).byteArray



Eliminado el cuello de botella en nuestro código de servidor reemplazando

Stream.continually(request.getInputStream.read()).takeWhile(_ != -1).map(_.toByte).toArray

con

org.apache.commons.io.IOUtils.toByteArray(request.getInputStream)


En una línea similar a la respuesta de Eastsun ... Comencé esto como un comentario, pero terminó siendo un poco largo.

Advertiría contra el uso de Stream , si mantiene una referencia al elemento principal, las transmisiones pueden consumir mucha memoria.

Dado que solo vas a leer el archivo una vez, Iterator es una opción mucho mejor:

def inputStreamToByteArray(is: InputStream): Array[Byte] = Iterator continually is.read takeWhile (-1 !=) map (_.toByte) toArray


Qué tal si:

Stream.continually(is.read).takeWhile(_ != -1).map(_.toByte).toArray


Source.fromInputStream (es) .map (_. ToByte) .toArray


def inputStreamToByteArray(is: InputStream): Array[Byte] = { val buf = ListBuffer[Byte]() var b = is.read() while (b != -1) { buf.append(b.byteValue) b = is.read() } buf.toArray }


import scala.tools.nsc.io.Streamable Streamable.bytes(is)

No recuerdo qué tan reciente es eso: probablemente se mide en días. Volviendo a 2.8, es más como

new Streamable.Bytes { def inputStream() = is } toByteArray