2

その入力ストリームを http フレームワーク (Finch および Akka Http) に渡すことができるように変換fs2.Streamしたいと思います。java.io.InputStream

が見つかりましたfs2.io.toInputStreamが、これは機能しません (何も出力されません)。

import java.io.{ByteArrayInputStream, InputStream}

import cats.effect.IO
import scala.concurrent.ExecutionContext.Implicits.global

object IOTest {

  def main(args: Array[String]): Unit = {
    val is: InputStream = new ByteArrayInputStream("test".getBytes)
    val stream: fs2.Stream[IO, Byte] = fs2.io.readInputStream(IO(is), 128)

    val test: Seq[InputStream] = stream.through(fs2.io.toInputStream).compile.toList.unsafeRunSync()

    println(scala.io.Source.fromInputStream(test.head).mkString)
  }
}

私が理解している限り、実行時に.unsafeRunSync()ストリーム全体を消費しているためSeq[InputStream]、下にある入力ストリームが返されても、すでに消費されています。

fs2.Stream[IO, Byte]消費せjava.io.InputStreamずに変換できる方法はありますか?

タナクス!

4

2 に答える 2

-1

Finch には fs2 がサポートされているようですhttps://github.com/finagle/finch/tree/master/fs2と Akka にもストリーム実装があり、fs2 - Akka Stream 相互運用ライブラリ ( https://github.com/krassermなど) があります。 /streamz/ツリー/マスター/streamz-コンバーター

したがって、リソースのライフサイクルを処理する実装を確認することをお勧めします。おそらくライブラリ全体は必要ありませんが、ガイドラインとして役立ちます。

そして、fs2 を使用して「セーフ ゾーン」から始めているのであれば、なぜそこから移動するのでしょうか :)

于 2020-04-17T16:53:12.070 に答える