public static void main(String[] args) throws IOException, ClassNotFoundException {
Student st=new Student();
byte[] _bs =Amf3_3.serialize(st);
Student st2= (Student) Amf3_3.deserialize(_bs);
}
public class Amf3_3 {
public static byte[] serialize(Object data) throws IOException {
MessageBody body = new MessageBody();
body.setData(data);
ActionMessage message = new ActionMessage();
message.addBody(body);
ByteArrayOutputStream out = new ByteArrayOutputStream();
AmfMessageSerializer serializer = new AmfMessageSerializer();
serializer.initialize(SerializationContext.getSerializationContext(), out, null);
serializer.writeMessage(message);
return out.toByteArray();
}
public static Object deserialize(byte[] amf) throws ClassNotFoundException, IOException {
ByteArrayInputStream in = new ByteArrayInputStream(amf);
AmfMessageDeserializer deserializer = new AmfMessageDeserializer();
deserializer.initialize(SerializationContext.getSerializationContext(), in, null);
ActionMessage message=new ActionMessage();
deserializer.readMessage(message, new ActionContext());
return message.getBody(0);
}
}
public class Student implements Serializable{
private static final long serialVersionUID = 1L;
public String account;
public String tClass;
public Student() {
this.account = "111";
this.tClass = "222";
}
@Override
public String toString() {
return "Student{" +
"account='" + account + '\'' +
", tClass='" + tClass + '\'' +
'}';
}
}
Exception in thread "main" flex.messaging.io.SerializationException: Creation validation for class 'Student' failed.
at flex.messaging.util.ClassUtil.validateCreation(ClassUtil.java:354)
at flex.messaging.util.ClassUtil.createDefaultInstance(ClassUtil.java:115)
at flex.messaging.io.AbstractProxy.createInstanceFromClassName(AbstractProxy.java:95)
at flex.messaging.io.AbstractProxy.createInstance(AbstractProxy.java:115)
at flex.messaging.io.amf.AbstractAmfInput.createObjectInstance(AbstractAmfInput.java:169)
at flex.messaging.io.amf.Amf3Input.readScriptObject(Amf3Input.java:748)
at flex.messaging.io.amf.Amf3Input.readObjectValue(Amf3Input.java:156)
at flex.messaging.io.amf.Amf3Input.readObject(Amf3Input.java:134)
at flex.messaging.io.amf.Amf0Input.readObjectValue(Amf0Input.java:124)
at flex.messaging.io.amf.Amf0Input.readObject(Amf0Input.java:95)
at flex.messaging.io.amf.AmfMessageDeserializer.readObject(AmfMessageDeserializer.java:199)
at flex.messaging.io.amf.AmfMessageDeserializer.readBody(AmfMessageDeserializer.java:173)
at flex.messaging.io.amf.AmfMessageDeserializer.readMessage(AmfMessageDeserializer.java:93)
at Amf3_3.deserialize(Amf3_3.java:28)
at Demo.main(Demo.java:28)
断开与目标 VM 的连接,地址:'127.0.0.1:1113', transport: 'socket'
进程已结束,退出代码 1
import java.io.IOException;
public class Demo {
public static void main(String[] args) throws IOException, ClassNotFoundException {
//创建
Student st = Student.builder().account("aa").tClass("bb").build();
//序列化
byte[] _bs = Amf3_3.serialize(st);
//反序列化
System.out.println(Amf3_3.deserialize(_bs));
}
}
import flex.messaging.io.SerializationContext;
import flex.messaging.io.amf.*;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
public class Amf3_3 {
public static byte[] serialize(Object data) throws IOException {
MessageBody body = new MessageBody();
body.setData(data);
ActionMessage message = new ActionMessage();
message.addBody(body);
ByteArrayOutputStream out = new ByteArrayOutputStream();
AmfMessageSerializer serializer = new AmfMessageSerializer();
serializer.initialize(SerializationContext.getSerializationContext(), out, null);
serializer.writeMessage(message);
return out.toByteArray();
}
public static Object deserialize(byte[] amf) throws ClassNotFoundException, IOException {
ByteArrayInputStream in = new ByteArrayInputStream(amf);
AmfMessageDeserializer deserializer = new AmfMessageDeserializer();
deserializer.initialize(SerializationContext.getSerializationContext(), in, null);
ActionMessage message = new ActionMessage();
deserializer.readMessage(message,new ActionContext());
MessageBody body = message.getBody(0);
return body.getData();
}
}
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.NoArgsConstructor;
import java.io.Serializable;
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class Student implements Serializable {
private static final long serialVersionUID = -6511660272442746949L;
public String account;
public String tClass;
}
依赖包版本的问题,更新到最新的版本,或者更换适合的版本
Student类代码改成如下试试:
public class Student implements Serializable{
private static final long serialVersionUID = 1L;
public String account;
public String tClass;
public Student() {
}
public Student(String account, String tClass) {
this.account = account;
this.tClass = tClass;
}
public String getAccount() {
return account;
}
public void setAccount(String account) {
this.account = account;
}
public String gettClass() {
return tClass;
}
public void settClass(String tClass) {
this.tClass = tClass;
}
@Override
public String toString() {
return "Student{" +
"account='" + account + '\'' +
", tClass='" + tClass + '\'' +
'}';
}
}
设置一下字符集用utf8或者其它的