Hexエンコードされたバイト配列のバイト配列はバイト配列に変換されます。どうして?
-
14-11-2019 - |
質問
この質問は、緊急の必要性ではなく、好奇心の不安を求められています。私はオブジェクトをバイト配列に変換するためのいくつかのコードを見つけました(私はその時点でそれを必要と思ったと思った)。
commons-codecを使用すると、純粋なバイト配列の符号化された六角文字列表現が、「ToByteArray」メソッドを介してバイト配列を渡した場合、私が得たものとは異なることに気づいた。長いバージョンがhex文字列表現の短いバージョンで終わることに気づいた。
本能的にこれは正しくないようで、なぜこれが起こるのですか?
「Tobytearray」の変換方法を介して見つけた追加バイトは何を表しますか?
エンコーディングと関係があることを推測していますか?
どうもありがとう、私はこれが新しいビーの質問の多くではないことを願っています。
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;
import org.apache.commons.codec.binary.Hex;
public class Test {
public static void main(String[] args) throws IOException {
byte[] bytes = "Stackoverflow".getBytes();
System.out.println(Hex.encodeHexString(bytes));
System.out.println(Hex.encodeHexString(toByteArray(bytes)));
}
public static byte[] toByteArray(Object obj) throws IOException {
byte[] bytes = null;
ByteArrayOutputStream bos = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(bos);
oos.writeObject(obj);
oos.flush();
oos.close();
bos.close();
bytes = bos.toByteArray();
return bytes;
}
}
.
結果
537461636B6F766572666C6F77 aced0005772000854JA120000787000000D537461636C6F777772666C6F777726666C6F77772666C6F77772666C6F777726666C6F77772666C6F76572666C6F77772666C6F77726666C6F77
解決
2番目の符号化は、オブジェクトのシリアル化フォーマットであるため、最初のケースは単なるコンテンツです。オブジェクトシリアル化には、オブジェクトの種類、オブジェクトの種類、およびオブジェクト内のコンテンツの種類があります(終了は同じです)
他のヒント
ObjectOutputStreamは、(直列化可能な限り)任意の種類のオブジェクトをシリアル化することができます。だから、それは他のオブジェクトのためのスペースがないことを意味するので、それはそれ自体に、それは本当にbyte[]
をマッピングすることはできません。