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