質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.47%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

解決済

3回答

5155閲覧

javaでbyte配列を短い文字列に変換する簡単な方法はありますか。

退会済みユーザー

退会済みユーザー

総合スコア0

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

0グッド

1クリップ

投稿2015/11/24 10:02

編集2015/11/25 06:45

javaで自作のクラスをbyte配列に変換後、短い文字列に変換しその後、byte配列、元の自作クラス、の順に元に戻す実装を行いたいのですが、byte配列を短い文字列にするのは、自作するしかないですか?
簡単な方法があればご教示頂けないでしょうか。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答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

ipadcaron

総合スコア1693

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2015/11/25 07:01

ありがとうございます。バイト配列の圧縮方法、参考になりました。今回は、既存のapiで圧縮したいとおもいます。もし、お時間があれば1バイト2文字と言うのがわからなかったのでご説明頂ければ幸いです。
guest

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

raccy

総合スコア21735

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2015/11/25 02:01

ありがとうございます。こちらで文字列に変換できました。ただ容量が求めている物よりやや大きかったです。こちらを応用してどうにかしたいと思います。
guest

0

ベストアンサー

インターネットでよく使われているbase64エンコーディングを使ってみてはどうでしょうか? Java 8からはSDKに含まれているそうです。

投稿2015/11/24 10:18

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2015/11/25 06:58 編集

ありがとうございます。こちらでbyte配列を文字列に変換できました。暗号化もされるのでこちらを使おうと思います。また、エンコードする前にbyte配列を圧縮した所、文字数が若干減りました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.47%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問