ZIO Streams:ZSink 和 ZTransducer 之间有什么区别?
ZIO Streams: Which is the difference between a ZSink and a ZTransducer?
我正在研究 ZIO Streams,使用 1.0.9 版的库 zio-streams
。
我找不到任何参考文献来说明 ZSink
和 ZTransducer
之间的区别。
有什么区别?
A ZSink
用于消耗 ZStream
中的元素。反过来,接收器将导致整个流的具体化 运行 通过并产生一个值。
A ZTransducer
是一个有状态函数,它处理流中的 块 数据,与 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
和 utf8Decode
将字节块解码为字符串,然后按行拆分它们。最后,我们使用 .run
方法并提供一个 ZSink
将数据逐个元素发送到控制台。
有关 ZStream 新设计的更多信息 can be found here.
我正在研究 ZIO Streams,使用 1.0.9 版的库 zio-streams
。
我找不到任何参考文献来说明 ZSink
和 ZTransducer
之间的区别。
有什么区别?
A ZSink
用于消耗 ZStream
中的元素。反过来,接收器将导致整个流的具体化 运行 通过并产生一个值。
A ZTransducer
是一个有状态函数,它处理流中的 块 数据,与 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
和 utf8Decode
将字节块解码为字符串,然后按行拆分它们。最后,我们使用 .run
方法并提供一个 ZSink
将数据逐个元素发送到控制台。
有关 ZStream 新设计的更多信息 can be found here.