nba*_*man 1 scala stream http4s fs2
例如,假设我已经val fs2Stream: Stream[IO, Byte]并且需要调用一些需要java.io.InputStream.
我想我对 FS2 还太陌生,但我似乎找不到答案。我尝试使用fs2.io.toInputStreamandfs2.io.readInputStream但我不知道如何提供一些所需的参数。我已经在万能的 Google 上搜索了答案,但自从大多数人上次寻找答案以来,API 似乎已经发生了变化。
我该如何去做类似以下的事情?
def myFunc(data: fs2.Stream[IO, Byte]): InputStream[Byte] = someMagicalFunction(data)
Run Code Online (Sandbox Code Playgroud)
你可能想要这样的东西:
import cats.effect.{ContextShift, IO, Resource}
import java.io.InputStream
def myFunc(data: fs2.Stream[IO, Byte])
(implicit cs: ContextShift[IO]): Resource[IO, InputStream] =
data.through(fs2.io.toInputStream).compile.resource.lastOrError
Run Code Online (Sandbox Code Playgroud)
然后你可以像这样使用它:
object JavaApi {
def foo(is: InputStream): IO[Unit] = ???
}
object Main extends IOApp {
def data: fs2.Stream[IO, Byte] = ???
override def run(args: List[String]): IO[ExitCode] =
myFunc(data).use(JavaApi.foo).as(ExitCode.Success)
}
Run Code Online (Sandbox Code Playgroud)
这是一个正在运行代码的Scastie 。
| 归档时间: |
|
| 查看次数: |
1117 次 |
| 最近记录: |