繁体   English   中英

转换为 Scala 代码 PEM 到 DER 证书 从 Google KMS 库跟进

[英]Convert to Scala code PEM to DER Certificate Follow it up from Google KMS Library

我是 Scala 的新手,并试图将其转换为:

  public static byte[] convertPemToDer(String pem) {
            BufferedReader bufferedReader = new BufferedReader(new StringReader(pem));
            String encoded =
                    bufferedReader
                            .lines()
                            .filter(line -> !line.startsWith("-----BEGIN") && !line.startsWith("-----END"))
                            .collect(Collectors.joining());
            return Base64.getDecoder().decode(encoded);
        }

到 Scala 代码:

def convertPemToDer(pem: String): Array[Byte] = {
    val bufferedReader = new BufferedReader(new StringReader(pem))
    val encoded = bufferedReader.lines.filter((line: String) => !line.startsWith("-----BEGIN") && !line.startsWith("-----END")).collect(Collectors.joining)
    Base64.getDecoder.decode(encoded)
  }

它显示了过滤器中的这种类型不匹配:

type mismatch; found : String => Boolean required: java.util.function.Predicate[_ >: String]

仔细检查您的进口。 我可以使用这些导入来运行您的代码:

import java.io.{BufferedReader, StringReader}
import java.util.Base64
import java.util.stream.Collectors

代码编译并运行得很好。 我只是在最后添加了一个println

object Main extends App {

  def convertPemToDer(pem: String): Array[Byte] = {
    val bufferedReader = new BufferedReader(new StringReader(pem))
    val encoded = bufferedReader.lines
      .filter((line: String) =>
        !line.startsWith("-----BEGIN") && !line.startsWith("-----END")
      )
      .collect(Collectors.joining)
    Base64.getDecoder.decode(encoded)
  }

  println(convertPemToDer("Elephant").mkString("Array(", ", ", ")"))

}

输出:

Array(18, 87, -87, -123, -87, -19)

如果您没有将 Intellij 与 Scala 插件一起使用,您的 IDE 可能无法将Functional Interfaces识别为Single Abstract Methods 因此,您可能需要将代码调整为更 Java 风格的方法,如下所示:

  def convertPemToDer(pem: String): Array[Byte] = {
    val bufferedReader = new BufferedReader(new StringReader(pem))
    val encoded = bufferedReader.lines
      .filter(new Predicate[String] {
        override def test(line: String): Boolean =
          !line.startsWith("-----BEGIN") && !line.startsWith("-----END")
      })
      .collect(Collectors.joining)
    Base64.getDecoder.decode(encoded)
  }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM