首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何将源[ByteString,Any]转换为InputStream

如何将源[ByteString,Any]转换为InputStream
EN

Stack Overflow用户
提问于 2015-05-28 17:41:52
回答 2查看 14.9K关注 0票数 33

akka-http表示使用分块/表单数据编码上传的文件,格式为Source[ByteString, Any]。我需要使用需要InputStream的Java库对其进行解组。

如何将Source[ByteString, Any]转换为InputStream

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-01-18 22:28:17

从2.x版开始,您可以使用以下代码来实现这一点:

代码语言:javascript
复制
import akka.stream.scaladsl.StreamConverters
...
val inputStream: InputStream = entity.dataBytes
        .runWith(
           StreamConverters.asInputStream(FiniteDuration(3, TimeUnit.SECONDS))
        )

请参阅:http://doc.akka.io/docs/akka-stream-and-http-experimental/2.0.1/scala/migration-guide-1.0-2.x-scala.html

注意:在版本2.0.2中被破坏,并在2.4.2中修复

票数 25
EN

Stack Overflow用户

发布于 2015-05-28 20:35:57

您可以尝试使用写入PipedOutputStreamOutputStreamSink,并将其提供给其他代码用作其输入流的PipedInputStream。这是一个有点粗糙的想法,但它可以工作。代码将如下所示:

代码语言:javascript
复制
import akka.util.ByteString
import akka.stream.scaladsl.Source
import java.io.PipedInputStream
import java.io.PipedOutputStream
import akka.stream.io.OutputStreamSink
import java.io.BufferedReader
import java.io.InputStreamReader
import akka.actor.ActorSystem
import akka.stream.ActorFlowMaterializer

object PipedStream extends App{
  implicit val system = ActorSystem("flowtest")
  implicit val mater = ActorFlowMaterializer()

  val lines = for(i <- 1 to 100) yield ByteString(s"This is line $i\n")
  val source = Source(lines)

  val pipedIn = new PipedInputStream()
  val pipedOut = new PipedOutputStream(pipedIn)      
  val flow = source.to(OutputStreamSink(() => pipedOut))
  flow.run()

  val reader = new BufferedReader(new InputStreamReader(pipedIn))
  var line:String = reader.readLine
  while(line != null){
    println(s"Reader received line: $line")
    line = reader.readLine
  }           
}
票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30502844

复制
相关文章

相似问题

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