我正在研究 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
编码是基于块的,使用transduce
with utf8Decode
which 将一个字节块解码为 String,然后逐行拆分它们。最后,我们使用该.run
方法并提供一个一个ZSink
元素一个元素地向控制台发出数据的方法。
更多关于 ZStream 的新设计可以在这里找到。