-2
私はgzipでタプルのシーケンスを保存する必要があります。その後私は、圧縮されたコンテンツを抽出し、解凍して、タプルのシーケンスを戻すことができるようにしたい。タプルのGzipシーケンスを作成し、タプルのシーケンスに再度解凍する - シーケンスを解凍するときに問題が発生する
私はデ/圧縮するために、次のコードを使用します。
def unzip(x: Array[Byte]) : String = {
val inputStream = new GZIPInputStream(new ByteArrayInputStream(x))
val output = scala.io.Source.fromInputStream(inputStream).mkString
return output
}
def gzip(input: Array[Byte]): Array[Byte] = {
val bos = new ByteArrayOutputStream(input.length)
val gzip = new GZIPOutputStream(bos)
gzip.write(input)
gzip.close()
val compressed = bos.toByteArray
bos.close()
compressed
}
をこのソースhttps://gist.github.com/owainlewis/1e7d1e68a6818ee4d50eから取られたよう。
その後、私のルーチンは、多かれ少なかれ、以下の通りです:
val arr = Seq(("a",1),("b",2))
val arr_bytes = arr.toString.getBytes
val comp = compress(arr_bytes)
val x = unzip(comp)
出力は以下の通りです:
arr: Seq[(String, Int)] = List((a,1), (b,2))
arr_bytes: Array[Byte] = Array(76, 105, 115, 116, 40, 40, 97, 44, 49, 41, 44, 32, 40, 98, 44, 50, 41, 41)
comp: Array[Byte] = Array(31, -117, 8, 0, 0, 0, 0, 0, 0, 0, -13, -55, 44, 46, -47, -48, 72, -44, 49, -44, -44, 81, -48, 72, -46, 49, -46, -44, 4, 0, 35, 120, 118, -118, 18, 0, 0, 0)
x: String = List((a,1), (b,2))
問題は、xが今(と上記のフォーマットを持つ文字列でありますListという単語も含まれています)。例えば
:
x.toList
res174: List[Char] = List(L, i, s, t, (, (, a, ,, 1,), ,, , (, b, ,, 2,),))
私の質問は、どのように私は戻って私の正確な配列を解凍しない場合、またはどのように私は再び私の前の列にXを作るのですか?
あなたは、ストリームから文字列を読み込み、ストリームに文字列を書き込む...そして驚いています、あなたはひもを持っていますか? – Dima
入手可能な既知のシリアル化ライブラリのいずれかを使用してデータをシリアル化するためのテストを行いましたか?たとえば、Jackson Scalaモジュール(https://github.com/FasterXML/jackson-module-scala)を使用して、シリアライズされたオブジェクトをスカラクラスにマップすることができます。 – Miguel
こんにちはミゲル、うん、私がやったことが終わったとそれは働いたこと:) – Mnemosyne