首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >FS2流运行到InputStream的末尾

FS2流运行到InputStream的末尾
EN

Stack Overflow用户
提问于 2018-05-24 18:07:46
回答 1查看 1.5K关注 0票数 2

我对FS2非常陌生,需要一些关于设计的帮助。我正在尝试设计一个流,它将从底层的InputStream中提取块,直到它结束。以下是我尝试过的:

代码语言:javascript
复制
import java.io.{File, FileInputStream, InputStream}

import cats.effect.IO
import cats.effect.IO._

object Fs2 {

  def main(args: Array[String]): Unit = {
    val is = new FileInputStream(new File("/tmp/my-file.mf"))
    val stream = fs2.Stream.eval(read(is))
    stream.compile.drain.unsafeRunSync()
  }

  def read(is: InputStream): IO[Array[Byte]] = IO {
    val buf = new Array[Byte](4096)
    is.read(buf)
    println(new String(buf))
    buf
  }
}

程序会打印出唯一的第一部分。这是合理的。但我想找到一种“信号”的方式,在哪里停止阅读,哪里不停止。我的意思是一直打电话给read(is)直到它结束。有办法做到这一点吗?

我也试过repeatEval(read(is)),但它一直在读.我需要些中间的东西。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-05-24 18:28:43

使用fs2.io.readInputStreamfs2.io.readInputStreamAsync。前者阻塞当前线程,后者阻塞ExecutionContext中的线程。例如:

代码语言:javascript
复制
val is: InputStream = new FileInputStream(new File("/tmp/my-file.mf"))
val stream = fs2.io.readInputStreamAsync(IO(is), 128)
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50515613

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档