javaで自作のクラスをbyte配列に変換後、短い文字列に変換しその後、byte配列、元の自作クラス、の順に元に戻す実装を行いたいのですが、byte配列を短い文字列にするのは、自作するしかないですか?
簡単な方法があればご教示頂けないでしょうか。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答3件
0
お分りかと思いますが、1バイト2文字です。バイト配列を短くしたいなら、バイトのまま圧縮してから文字列にします。
圧縮方法は色々ありますが、小さいデータでは余程の特徴的なデータ並びではない限り元の大きさよりも最終成果物は大きくなります。
例えば、0,0,0,0,1
バイトデータで5バイトのデータは、4,0,1,1となります。1バイトの圧縮成功で、20%減ですね。
長さ、バイトデータ、長さ、バイトデータです。同じ並びが多ければ多いほど圧縮率が高くなります。
逆に、1,2,3,4,5 では、1,1,1,2,1,3,1,4,1,5 となり、元データの倍になってしまいます。そこで、連続する異なるバイト列を表すためのフラッグを設けます。長さを最長127ばいととし、最上位ビットが立ってるときは、後続の文字は圧縮されてないとする。そうすると、85,1,2,3,4,5 と表せ、20%増に収められる反面、連続データは最長127バイトとなり、圧縮効率が落ちてしまいます。
この圧縮方法は、ランレングス圧縮という単純なものですが、同一データ並びの圧縮には結構圧縮率がよくなります。最終的に文字列として保持したいなら、文字列化は最後に行う、1バイト2文字なので単純に圧縮後のデータ量の倍になるのでそれを勘案して最適な圧縮方法を選択するか、考えておかないとだめですね。
投稿2015/11/25 05:51
総合スコア1693
0
byte[]
をとにかくString
型にしたいと言うことでしょうか?8bit全部使っているのであれば、ISO 8859-1にすればいいようです。(JavaにはASCII-8BITのようなものはありません。ASCIIで指定してまうと7bitまでしか変換できないようです)
stackovreflow: Convert byte[] to String using binary encoding のベストアンサーより引用
Java
1String s = "Hello World! \u00ff"; 2byte[] b = s.getBytes("ISO-8859-1"); 3System.out.println(new String(b, "ISO-8859-1"));
投稿2015/11/24 13:00
総合スコア21735
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
ベストアンサー
インターネットでよく使われているbase64エンコーディングを使ってみてはどうでしょうか? Java 8からはSDKに含まれているそうです。
投稿2015/11/24 10:18
退会済みユーザー
総合スコア0
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2015/11/25 06:58 編集
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2015/11/25 07:01