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。