首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >黄曲柳充气的使用实例

黄曲柳充气的使用实例
EN

Stack Overflow用户
提问于 2015-05-04 13:27:22
回答 1查看 305关注 0票数 3

在下面的scalaz-stream使用示例(取自文档)中,如果输入和/或输出是一个压缩文件,我需要更改什么?换句话说,我如何使用compress

代码语言:javascript
复制
import scalaz.stream._
import scalaz.concurrent.Task

val converter: Task[Unit] =
  io.linesR("testdata/fahrenheit.txt")
    .filter(s => !s.trim.isEmpty && !s.startsWith("//"))
    .map(line => fahrenheitToCelsius(line.toDouble).toString)
    .intersperse("\n")
    .pipe(text.utf8Encode)
    .to(io.fileChunkW("testdata/celsius.txt"))
    .run

// at the end of the universe...
val u: Unit = converter.run
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-05-04 19:59:09

压缩输出是容易的。由于compress.deflate()Process1[ByteVector, ByteVector],所以需要将其插入管道中,在管道中发射ByteVectors (在text.utf8Encode之后,即Process1[String, ByteVector]):

代码语言:javascript
复制
val converter: Task[Unit] =
  io.linesR("testdata/fahrenheit.txt")
    .filter(s => !s.trim.isEmpty && !s.startsWith("//"))
    .map(line => fahrenheitToCelsius(line.toDouble).toString)
    .intersperse("\n")
    .pipe(text.utf8Encode)
    .pipe(compress.deflate())
    .to(io.fileChunkW("testdata/celsius.zip"))
    .run

对于inflate,不能使用io.linesR读取压缩文件。您需要一个生成ByteVectors而不是Strings的进程,以便将它们输送到inflate中。(您可以使用io.fileChunkR实现这个功能。)下一步是将未压缩的数据解码为String(例如,使用text.utf8Decode ),然后使用text.lines()逐行发出文本。像这样的事情应该能起作用:

代码语言:javascript
复制
val converter: Task[Unit] =
  Process.constant(4096).toSource
    .through(io.fileChunkR("testdata/fahrenheit.zip"))
    .pipe(compress.inflate())
    .pipe(text.utf8Decode)
    .pipe(text.lines())
    .filter(s => !s.trim.isEmpty && !s.startsWith("//"))
    .map(line => fahrenheitToCelsius(line.toDouble).toString)
    .intersperse("\n")
    .pipe(text.utf8Encode)
    .to(io.fileChunkW("testdata/celsius.txt"))
    .run
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30031377

复制
相关文章

相似问题

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