我正在研究 ZIO Streams,使用版本 1.0.9 的库zio-streams。我找不到任何可以显示 aZSink和 a之间区别的参考资料ZTransducer。
有什么不同?
我正在研究 ZIO Streams,使用版本 1.0.9 的库zio-streams。我找不到任何可以显示 aZSink和 a之间区别的参考资料ZTransducer。
有什么不同?
AZSink用于消耗 中的元素ZStream。反过来,sink 将导致整个流的物化贯穿并产生一个值。
AZTransducer是一个有状态的函数,它处理流中的数据块,与 a 相比,ZSink它的处理永远不会结束。
如果我们看一个简单的例子:
import zio.stream.{ ZSink, ZStream }
import zio.stream.ZTransducer.{ splitLines, utf8Decode }
import java.nio.file.Paths
ZStream
.fromFile(Paths.get("/foo"), chunkSize = 1024 * 4)
.transduce(utf8Decode >>> splitLines)
.run(ZSink.foreach(zio.console.putStr))
我们可以看到新的ZStream编码是基于块的,使用transducewith utf8Decodewhich 将一个字节块解码为 String,然后逐行拆分它们。最后,我们使用该.run方法并提供一个一个ZSink元素一个元素地向控制台发出数据的方法。
更多关于 ZStream 的新设计可以在这里找到。