如何将Scala流的内容写入文件?
发布时间:2020-12-16 18:45:14 所属栏目:安全 来源:网络整理
导读:我有一个 Scala字节流,我想写入文件.流有太多数据来缓冲所有内存. 作为第一次尝试,我创建了一个类似于此的InputStream: class MyInputStream(data: Stream[Byte]) extends InputStream { private val iterator = data.iterator override def read(): Int =
我有一个
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; } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |