我有一个功能
public static Object receviceSigAndData (Socket s) {
byte[] data = null;
try {
DataInputStream din2 = new DataInputStream(s.getInputStream());
int sig_len = 0;
sig_len = din2.readInt();
byte[] sig = new byte[sig_len];
din2.readFully(sig);
int data_len = 0;
data_len = din2.readInt();
data = new byte[data_len];
dsa.update(data);
} catch (IOException ioe) {
ioe.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
return (Object)data;
}
函数返回一个对象,如果对象是字节数组,我该如何将对象强制转换为byte[]
?
byte[] b = (?)receviceSigAndData (socket);
感谢
答案 0 :(得分:8)
查看您的代码:
Object
:因为它是一个向上的,它是隐式完成的(byte[]
静态地也是Object
)Object
投射到byte[]
:byte[] a = (byte[])obj
Object
的方法是完全没有意义的,签名意味着有用且信息丰富。返回Object
是您可以做的最不具信息性的事情。如果您的方法要返回byte[]
,则其返回值应为byte[]
类型答案 1 :(得分:5)
这里有两个辅助方法,可以将字节数组序列化和反序列化为对象。
public static Object deserializeBytes(byte[] bytes) throws IOException, ClassNotFoundException
{
ByteArrayInputStream bytesIn = new ByteArrayInputStream(bytes);
ObjectInputStream ois = new ObjectInputStream(bytesIn);
Object obj = ois.readObject();
ois.close();
return obj;
}
public static byte[] serializeObject(Object obj) throws IOException
{
ByteArrayOutputStream bytesOut = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(bytesOut);
oos.writeObject(obj);
oos.flush();
byte[] bytes = bytesOut.toByteArray();
bytesOut.close();
oos.close();
return bytes;
}