我想转换从socket得到的byte []我写的一个类(Message)。 我试过了
byte[] data=new btyte[100];
.
.
.
Message m=(Message)data;
但它没有用,给我错误 我该怎么办?
答案 0 :(得分:16)
假设您正在谈论序列化对象:
试试这个:
ObjectInputStream in = new ObjectInputStream(new ByteArrayInputStream(data));
Message message = (Message) in.readObject();
in.close();
如果您以其他方式序列化Message,则必须使用参数化构造函数或返回该类型的新实例的静态方法自行解析。
答案 1 :(得分:4)
您无法转换任意二进制数据(在Java中)。
该字节[]应该包含什么?如果它是类的序列化实例,则必须将套接字的InputStream包装在ObjectInputStream中。如果它是另一种定义良好的二进制格式,则必须手动解析它(注意:转储C结构不构成定义良好的二进制格式,应该避免使用)。
答案 2 :(得分:2)
你最好写一个函数去做。
Message parseDataFromSocket(byte[] bytes);
答案 3 :(得分:1)
尝试将ObjectInputStream
与ByteArrayInputStream
一起使用。
看起来你正在尝试阅读一个序列化的类。
如上所述编辑为ByteArrayInputStream。
答案 4 :(得分:1)
您需要创建一个Message构造函数,它接受一个byte [](并使用它以某种方式初始化该对象)。然后你可以这样做:
Message m = new Message(data);
答案 5 :(得分:1)
如果字节数组已正常序列化,您可以使用ByteArrayInputStream
,将其传递到ObjectInputStream
并将生成的Object
转换为Message
类。
答案 6 :(得分:1)
这取决于字节数组的创建方式......您可以尝试:
ObjectInputStream in = new ObjectInputStream(new ByteArrayInputStream(data))
Message m = (Message) in.readObject();
答案 7 :(得分:1)