akka ByteString的Base64编码

时间:2017-05-19 11:43:57

标签: scala jackson base64 akka

我一直在寻找一种方法将Scala的Array [Byte]更改为其他一些不可变的集合类。我想将这些字节数组重构为更优雅的Akka ByteStrings,但是我遇到了编码问题。据我所知(我是scala新手)编码ByteStrings和Array [Bytes]与Jackson序列化返回使用Base64使用相同值的两种数据类型的不同结果。所以我的问题是,是否有一种很好的方法可以将Arrays重构为不可变集合,同时保持与旧Array相同的Base64序列化值?

1 个答案:

答案 0 :(得分:1)

我会使用circe或argonaut而不是Jackson来进行json序列化。它们可以轻松地为您提供不同类型的自定义编码器。

implicit val byteArrayEncoder = 
    Encoder.encodeString.contramap[Array[Byte]](new String(_))
implicit val byteStringEncoder = 
    Encoder.encodeString.contramap[ByteString](_.UTF_8)

然后你可以像..一样使用它。

import io.circe._, io.circe.generic.auto._, io.circe.parser._, io.circe.syntax._

case class Whatever(bytes: Array[Byte], bstring: ByteString)

Whatever(???).asJson.nospaces

了解更多信息

https://circe.github.io/circe/