随着Scala,从InputStream读取字节数组的最佳方式是什么?Scala:输入流到数组[字节]
我可以看到,你可以转换一个InputStream到字符数组
Source.fromInputStream(is).toArray()
随着Scala,从InputStream读取字节数组的最佳方式是什么?Scala:输入流到数组[字节]
我可以看到,你可以转换一个InputStream到字符数组
Source.fromInputStream(is).toArray()
如何:
Stream.continually(is.read).takeWhile(_ != -1).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)
不记得怎么最近是:在天大概测量。让我们回到2.8,它更像
new Streamable.Bytes { def inputStream() = is } toByteArray
本着同样的精神,以东日的答案......我一开始这是一个评论,但它最终得到只是有点要多久!
我对使用Stream
要小心,如果持有头元素的引用,那么流很容易消耗大量内存。
既然你只打算在文件中一次读,然后Iterator
是一个更好的选择:
def inputStreamToByteArray(is: InputStream): Array[Byte] =
Iterator continually is.read takeWhile (-1 !=) map (_.toByte) toArray
随着Scala IO,这应该工作:
def inputStreamToByteArray(is: InputStream): Array[Byte] =
Resource.fromInputStream(in).byteArray
只是删除瓶颈在我们的服务器代码中通过替换
Stream.continually(request.getInputStream.read()).takeWhile(_ != -1).map(_.toByte).toArray
与
org.apache.commons.io.IOUtils.toByteArray(request.getInputStream)
Source.fromInputStream(是).MAP(_ toByte).toArray
这里有一个方法使用scalaz流:
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)
随着better-files,你可以简单地做is.bytes
列表[字节]有一个方法“添加”? – Eastsun 2011-02-05 08:06:30
好问题。我只是编辑它使用可变的ListBuffer – 2011-02-05 08:30:31