2017-05-19 15 views
2

ScalaのArray [Byte]を他の不変なコレクションクラスに変更する方法を探してきました。私は、よりエレガントなAkka ByteStringsへのそれらのthetearraysをリファクタリングしたいと思いますが、私はエンコーディングの問題に遭遇しました。私が知っている限り(私はスカラ初心者です)、ByteStringsとArray [Bytes]をJackson serializationでエンコードすると、Base64を使用して同じ値を使用する両方のデータ型で異なる結果が返されます。だから私の質問は、古いArrayと同じBase64シリアル化された値を保持しながら、不変のコレクションに配列をリファクタリングするうまくきれいな方法があるのですか?akkaのBase64エンコーディングByteString

答えて

1

jsonのシリアル化では、Jacksonの代わりにcirceまたはargonautを使用します。さまざまなタイプのカスタムエンコーダを簡単に提供できます。もっと見るために

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/