加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

如何将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;
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读