首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将Source[ByteString,Any]转换为Source[ByteString,IOResult]

将Source[ByteString,Any]转换为Source[ByteString,IOResult]
EN

Stack Overflow用户
提问于 2018-08-30 11:36:36
回答 1查看 643关注 0票数 0

我有一个:

代码语言:javascript
复制
val fileStream: Source[ByteString, Any] = Source.single(ByteString.fromString("Hello"))

Source[ByteString, Any]类型来自akka fileUpload指令:

https://doc.akka.io/docs/akka-http/current/routing-dsl/directives/file-upload-directives/fileUpload.html

我是否可以将其转换为Source[ByteString, IOResult],或者执行类似于Source.single(ByteString.fromString("Hello"))的其他操作,从字符串中返回Source[ByteString, IOResult]

我可以使用以下方法创建IO结果:

代码语言:javascript
复制
val ioResult: IOResult = IOResult.createSuccessful(1L)

和一个ByteString,包括:

代码语言:javascript
复制
val byteString: ByteString = ByteString.fromString("Hello")

所以现在我只需要他们作为一个Source[ByteString, IOResult]

注意,这只是一个单元测试,我正在测试一个返回Source[ByteString, IOResult]的函数,所以我想创建这个函数的一个实例(不需要创建一个文件)来断言函数返回正确的ByteString,我并不真正关心SourceIOResult部分。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-08-30 13:24:30

专用于fileUpload指令

我怀疑fileUpload编写器将物化类型保留为Any,以便允许将来对API进行更改。通过将其保留为Any,他们以后可以将其更改为他们真正想要解决的类型。

因此,即使您能够转换到IOResult,如果您升级了akka版本,并且类型发生了更改,您可能会遇到一些问题。

物化一般

Source类型参数中的第二个类型指示流将“物化”到什么中。使用示例代码并将Any修改为NotUsed,我们可以显示流的整个生命周期:

代码语言:javascript
复制
val notUsed : NotUsed = Source.single(ByteString.fromString("Hello"))
                              .toMat(Sink.ignore)(Keep.left)
                              .run()

如您所见,当流运行时,它将被转换为一个实际值(即物化)。在上面的例子中,值的类型是NotUsed。这是因为您无法对单个值的流执行太多操作。

将该流与对文件进行操作的流。进行对比

代码语言:javascript
复制
val file = Paths.get("example.csv")

val fileIOResult: Future[IOResult] = FileIO.fromPath(file)
                                           .to(Sink.ignore)
                                           .run()

在本例中,流正在读取文件的内容并将其流到Sink。在这里,了解文件读取中是否有任何错误是有用的。为了能够了解文件读取进行得有多顺利,流被物化成一个Future[IOResult],您可以使用它获取有关文件读取的信息:

代码语言:javascript
复制
fileIOResult foreach { ioResult =>
  println(s"read ${ioResult.count} bytes from file")
}

因此,将Any“转换”为IOResult是没有意义的.

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52096078

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档