Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala 播放迭代对象:简单文件迭代错误_Scala_Playframework 2.0_Iterate - Fatal编程技术网

Scala 播放迭代对象:简单文件迭代错误

Scala 播放迭代对象:简单文件迭代错误,scala,playframework-2.0,iterate,Scala,Playframework 2.0,Iterate,目前,我正试图将注意力集中在枚举数和迭代对象上。我决定从Play2.0的iteratee库开始,我已经在build.sbt文件中将它添加到了我的测试项目中。(我正在使用Scala 2.10)() 我的目标是在文件的字节上创建一个枚举器,并最终为其附加一些解析逻辑,但当我尝试看似简单的方法时,我会遇到一个异常。 我的代码如下所示: val instr = getClass.getResourceAsStream(...) val streamBytes = for { chunk <-

目前,我正试图将注意力集中在
枚举数
迭代对象
上。我决定从Play2.0的iteratee库开始,我已经在build.sbt文件中将它添加到了我的测试项目中。(我正在使用Scala 2.10)()

我的目标是在文件的字节上创建一个枚举器,并最终为其附加一些解析逻辑,但当我尝试看似简单的方法时,我会遇到一个异常。 我的代码如下所示:

val instr = getClass.getResourceAsStream(...)
val streamBytes = for {
  chunk <- Enumerator fromStream instr
  byte <- Enumerator enumerate chunk
} yield byte

val printer = Iteratee.foreach[Byte](println)

streamBytes.apply(printer)

由于堆栈跟踪没有指向代码中的任何地方,而且这是一个不熟悉的领域,所以我不知道出了什么问题。有人能为这个问题提供一些见解或解决方案吗?

看看这是否适合你。我也收到了你的代码异常,但当我解开你的comp时,一切都正常了。我不能100%确定原因,因为我认为for comp无论如何都与此代码有关,但我肯定遗漏了一些东西:

val bytes = Enumerator fromStream instr flatMap (Enumerator enumerate _)    
val printer = Iteratee.foreach[Byte](b => println(b))    
bytes |>> printer 

这很奇怪。。。我再次尝试了同样的事情(这次是在工作中),但它不是一个例外,而是在打印完成后永远挂起。即使使用了您提供的代码,它也会挂起。稍后(工作结束后)我将再次尝试此操作,然后再与您联系。我有一些停机时间,发现我最近的尝试被挂起,因为有一个内部
ExecutionContext
正在使用,而不是我真正想要的,它正在创建非守护进程线程。这看起来像是在玩虫子,不是吗?同意。
枚举
需要隐式的
执行上下文
。当我给它一个,然后在打印完成后关闭该上下文时,我的服务器仍然保持运行,这不是我所期望的。当然需要进一步调查。如果在jconsole中调出它,您会看到一个名为iteratee-execution-context的线程池。看起来它正在工作中:我将这个答案标记为已接受,因为它提供了一些有用的信息。
java.lang.IllegalStateException: Promise already completed.
    at scala.concurrent.Promise$class.complete(Promise.scala:55)
    at scala.concurrent.impl.Promise$DefaultPromise.complete(Promise.scala:58)
    at scala.concurrent.Promise$class.failure(Promise.scala:107)
    at scala.concurrent.impl.Promise$DefaultPromise.failure(Promise.scala:58)
    at scala.concurrent.Future$$anonfun$flatMap$1.liftedTree3$1(Future.scala:283)
    at scala.concurrent.Future$$anonfun$flatMap$1.apply(Future.scala:277)
    at scala.concurrent.Future$$anonfun$flatMap$1.apply(Future.scala:274)
    at scala.concurrent.impl.CallbackRunnable.run(Promise.scala:29)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
    at java.lang.Thread.run(Thread.java:722)
val bytes = Enumerator fromStream instr flatMap (Enumerator enumerate _)    
val printer = Iteratee.foreach[Byte](b => println(b))    
bytes |>> printer