Scala 使用枚举器/Iteratee获取作为字符串的文件文本
查看Play Iteratee(以反应方式处理数据流),我有一个数组[Byte]枚举器(来自文件流),我需要获取该枚举器的字符串表示形式(我需要文本作为流的字符串) 我拥有的统计员样本是:Scala 使用枚举器/Iteratee获取作为字符串的文件文本,scala,stream,playframework-2.0,Scala,Stream,Playframework 2.0,查看Play Iteratee(以反应方式处理数据流),我有一个数组[Byte]枚举器(来自文件流),我需要获取该枚举器的字符串表示形式(我需要文本作为流的字符串) 我拥有的统计员样本是: Enumerator.fromFile(new File("test.txt")) 我可以通过折叠来解决它: val concat: Iteratee[Array[Byte], String] = Iteratee.fold[Array[Byte], String]("")((finalString,
Enumerator.fromFile(new File("test.txt"))
我可以通过折叠来解决它:
val concat: Iteratee[Array[Byte], String] =
Iteratee.fold[Array[Byte], String]("")((finalString, array) =>
finalString + new String(array.map(_.toChar)))
val textString = Await.result(
Iteratee.flatten(fileEnumerator |>> concat).run, 1 seconds)
还有其他更简单的解决方案吗?您可以使用
Iteratee.consume
。它将把所有输入连接成一个数组[字节]
。然后可以转换为字符串
val concat = Iteratee.consume[Array[Byte]]().map(x => new String(x))
只有在整个数组可用后,才有必要将其转换为字符串。单个字节无法映射到字符,因为许多字符的长度不是单个字节。获取整个字符串的另一种方法是,
试玩游戏机
尽管如此,这还是有帮助的
Iteratee.flatten(
fileEnumerator.map(chunk => new String(chunk)) |>> Iteratee.consume[String]()).run
.onSuccess {case wholeUniverse => println(wholeUniverse)}
$ play console
scala> import play.api.libs.iteratee.{Enumerator, Iteratee}
import play.api.libs.iteratee.{Enumerator, Iteratee}
scala> import scala.concurrent.ExecutionContext.Implicits.global
import scala.concurrent.ExecutionContext.Implicits.global
scala> import scala.concurrent.Future
import scala.concurrent.Future
scala> import java.io.File
import java.io.File
scala> val fileEnumerator = Enumerator.fromFile(new File("build.sbt"))
fileEnu: play.api.libs.iteratee.Enumerator[Array[Byte]] = play.api.libs.iteratee.Enumerator$$anon$4@650b0c9
scala> val future = Iteratee.flatten(fileEnumerator.map(x => new String(x)) |>> Iteratee.consume[String]()).run
future: scala.concurrent.Future[String] = scala.concurrent.impl.Promise$DefaultPromise@4134f577
scala> future.onSuccess {case x => println(x)}
import play.Project._
name := "shaharma-backend"
version := "1.0"
scalaVersion := "2.10.4"
playScalaSettings
resolvers += "Artima Maven Repository" at "http://repo.artima.com/releases"
libraryDependencies ++= Seq(
jdbc,
anorm,
"mysql" % "mysql-connector-java" % "5.1.36",
"com.typesafe.slick" %% "slick" % "2.1.0",
"com.typesafe.play" %% "play-slick" % "0.6.1"
)