在 Scala 中处理 InputStream

Handling InputStream in Scala

我有一个将 inputStream 作为参数的方法。一个InputStream,包含以下内容

问题是:如何在 Scala 中读取和操作流?

def process(in: InputStream): Long = ???

以下代码示例从第一行读取 n,然后为每一行计算 ti * li 与总和的乘积。

import java.io.InputStream
import java.io.ByteArrayInputStream
import java.nio.charset.StandardCharsets

import scala.io.Source
import scala.util.matching.Regex

  def process(in: InputStream): Long = {
    val lines = Source.fromInputStream(in).getLines()
    val n = lines.next().toInt
    val pattern: Regex = """\s*(\d+)\s+(\d+)\s*""".r
    lines.map {
      case pattern(ti, li) => ti.toInt * li.toInt
      case _ => 0
    }.sum
  }

  test("process InputStream") {
    val lines =
      raw"""3
           |1 10
           |2 200
           |3 3000
           |""".stripMargin
    println(lines)
    val is: InputStream = new ByteArrayInputStream(lines.getBytes(StandardCharsets.UTF_8))

    assert(process(is) == 9410)
  }