Hexエンコードされたバイト配列のバイト配列はバイト配列に変換されます。どうして?

StackOverflow https://stackoverflow.com/questions/5485836

質問

この質問は、緊急の必要性ではなく、好奇心の不安を求められています。私はオブジェクトをバイト配列に変換するためのいくつかのコードを見つけました(私はその時点でそれを必要と思ったと思った)。

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[]をマッピングすることはできません。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top