我有一个Scala字节流,我想将其写入文件。流中的数据太多,无法缓冲所有内存。
第一次尝试,我创建了一个类似于以下内容的InputStream
:
class MyInputStream(data: Stream[Byte]) extends InputStream {
private val iterator = data.iterator
override def read(): Int = if (iterator.hasNext) iterator.next else -1
}
然后,我使用Apache Commons编写文件:
val source = new MyInputStream(dataStream)
val target = new FileOutputStream(file)
try {
IOUtils.copy(source, target)
} finally {
target.close
}
这行得通,但我对性能不太满意。我猜每个字节调用
MyInputStream.read
会带来很多开销。有没有更好的办法?
最佳答案
您可能会(或可能不会!)误认为读取侧是性能问题的根源。可能是事实,您正在使用无缓冲的FileOutputStream(...),对每个写入的字节强制进行单独的系统调用。
这是我的看法,快速而简单:
def writeBytes( data : Stream[Byte], file : File ) = {
val target = new BufferedOutputStream( new FileOutputStream(file) );
try data.foreach( target.write(_) ) finally target.close;
}
关于scala - 如何将Scala流的内容写入文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29978264/