public static byte[] objectToByteArray(Object obj) throws IOException {
ByteArrayOutputStream out = new ByteArrayOutputStream();
ObjectOutputStream objOut = null;
try {
    objOut = new ObjectOutputStream(out);
    objOut.writeObject(obj);
    objOut.flush();
} finally {
    objOut.close();
    out.close();
}
return out.toByteArray();
}

Main Method :



 public static void main(String[] args) throws IOException {
//
// System.out.println(getFileName("/home/local/ZOHOCORP/bharathi-1397/logs/bharathi-1397.csez.zohocorpin.com_2012_05_24.log",0));
try {
    throw new IOException("Error in main method");
} catch (IOException io) {
    System.out.println(new String(objectToByteArray(io.getMessage()),
        "UTF-8"));
}
//
}


输出:
��

我想将Object转换为byte [],但为什么它返回ctrl这样的字符。我不明白你能帮忙吗?

最佳答案

序列化将对象转换为二进制数据。从根本上讲,它不是文本数据,就像图像文件不是文本数据一样。

您的代码尝试将这种不透明的二进制数据解释为好像是UTF-8编码的文本数据。不是,所以难怪您会看到垃圾。如果在文本编辑器中打开图像文件,则会看到类似的无用文本。您可以尝试将数据解释为文本(在执行操作时),但不会得到任何有用的信息。

如果要以可打印,可逆的方式将不透明的二进制数据表示为文本,则应使用base64或hex。有很多库可以转换为base64,包括this public domain one

07-24 22:33