簡體   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