這個問題是出於好奇而不是任何迫切的需求。我發現了一些代碼將一個對象轉換爲一個字節數組(我認爲我當時需要它)。十六進制編碼形式的字節數組不同於相同的字節數組「對象」轉換爲字節數組。爲什麼?
使用公共編解碼器,我注意到,純字節數組的編碼的十六進制字符串表示是我得到了什麼,如果我穿過下面的「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;
}
}
RESULT
537461636b6f766572666c6f77 aced0005757200025b42acf317f8060854e002000078700000000d537461636b6f766572666c6f77
謝謝 - 我仍然不正確地理解這一點(但是這不是你的錯!)。它在我看來像使用ObjectOutputStream不適合這種情況。也許DataOutputStream會給我更接近我預期的結果 - 雖然它已經是一個字節數組,因此不需要進一步處理。 – 2011-03-30 14:59:04
如果DataOutputStream已經是一個字節[],則它不執行任何操作。 – 2011-03-30 15:03:25