研究Kryonet协议是否支持不同版本JVM之间传递复杂对象以及引用参数,另外学习Kryonet协议。
1.java对象People、Person、Boyfriend、Boyfriend1、Address
2. 服务器端的核心代码
KryonetServer.java
public class KryonetServer {
/**
* @param args
*/
public static void main(String[] args) throws IOException{
Server server = new Server();
server.start();
server.bind(54555, 54777);
server.getKryo().register(People.class);
server.getKryo().register(Boyfriend.class);
server.getKryo().register(Boyfriend1.class);
server.getKryo().register(Person.class);
server.getKryo().register(Address.class);
server.getKryo().register(String.class);
server.getKryo().register(char[].class);
server.getKryo().register(HashMap.class);
server.getKryo().register(HashSet.class);
server.getKryo().register(ArrayList.class);
server.addListener(new Listener () {
public void received(Connection connection, Object object) {
if (object instanceof People) {
People people = (People)object;
Person boyfriend = new Boyfriend();
Person boyfriend1 = new Boyfriend1();
Address address = new Address();
List<Person> boyfriends = new ArrayList<Person>();
Map<String, Person> boyfriendMap = new HashMap<String, Person>();
Set<Person> boyfriendSet = new HashSet<Person>();
address.setZipCode("518000");
address.setUrl("中国广东深圳");
boyfriend.setAddress(address);
boyfriend1.setAddress(address);
boyfriends.add(boyfriend);
boyfriends.add(boyfriend1);
boyfriendMap.put("fengluan", boyfriend);
boyfriendMap.put("fengluan1", boyfriend1);
boyfriendSet.add(boyfriend);
boyfriendSet.add(boyfriend1);
people.setName("fenglin");
people.setBoyfriend(boyfriend);
people.setBoyfriend1(boyfriend1);
people.setBoyfriends(boyfriends);
people.setBoyfriendMap(boyfriendMap);
people.setBoyfriendSet(boyfriendSet);
connection.sendTCP(people);
}
}
});
}
}
3. 客户端核心代码
KryonetClient.java
public class KryonetClient {
/**
* @param args
*/
public static void main(String[] args) throws IOException{
Client client = new Client();
client.start();
client.connect(5000, "127.0.0.1", 54555, 54777);
client.getKryo().register(People.class);
client.getKryo().register(Boyfriend.class);
client.getKryo().register(Boyfriend1.class);
client.getKryo().register(Person.class);
client.getKryo().register(Address.class);
client.getKryo().register(String.class);
client.getKryo().register(char[].class);
client.getKryo().register(HashMap.class);
client.getKryo().register(HashSet.class);
client.getKryo().register(ArrayList.class);
People service = new People();
client.sendTCP(service);
client.addListener(new Listener(){
public void received(Connection connection, Object object) {
if (object instanceof People) {
People people = (People)object;
System.out.println(people.getName());
//System.out.println(people.getBoyfriend().getAddress() == people.getBoyfriend1().getAddress());
System.out.println(people.getBoyfriend() == people.getBoyfriends().get(0));
System.out.println(people.getBoyfriendMap().get("fengluan") == people.getBoyfriendSet().iterator().next());
System.out.println(people.getBoyfriend() == people.getBoyfriendMap().get("fengluan"));
}
}
});
}
}
4. 测试Kryo序列化是否支持引用参数传递
KryoTest.java
public class KryoTest {
/**
* @param args
*/
public static void main(String[] args) throws FileNotFoundException{
Kryo kryo = new Kryo();
Output output = new Output(new FileOutputStream("file.bin"));
People people = new People();
Person boyfriend = new Boyfriend();
Person boyfriend1 = new Boyfriend1();
Address address = new Address();
List<Person> boyfriends = new ArrayList<Person>();
Map<String, Person> boyfriendMap = new HashMap<String, Person>();
Set<Person> boyfriendSet = new HashSet<Person>();
address.setZipCode("518000");
address.setUrl("中国广东深圳");
boyfriend.setAddress(address);
boyfriend1.setAddress(address);
boyfriends.add(boyfriend);
boyfriends.add(boyfriend1);
boyfriendMap.put("fengluan", boyfriend);
boyfriendMap.put("fengluan1", boyfriend1);
boyfriendSet.add(boyfriend);
boyfriendSet.add(boyfriend1);
people.setName("fenglin");
people.setBoyfriend(boyfriend);
people.setBoyfriend1(boyfriend1);
people.setBoyfriends(boyfriends);
people.setBoyfriendMap(boyfriendMap);
people.setBoyfriendSet(boyfriendSet);
kryo.writeObject(output, people);
output.close();
Input input = new Input(new FileInputStream("file.bin"));
People people1 = kryo.readObject(input, People.class);
input.close();
System.out.println(people1.getName());
System.out.println(people1.getBoyfriend() == people1.getBoyfriends().get(0));
System.out.println(people1.getBoyfriendMap().get("fengluan") == people1.getBoyfriendSet().iterator().next());
System.out.println(people1.getBoyfriend() == people1.getBoyfriendMap().get("fengluan"));
}
}
5.测试结果:kryonet-rpc虽然支持复杂传递对象,但是默认情况下不支持引用参数传递,需要调用getKryo().setReferences(true)让其支持引用参数传递,默认情况下是为false的。其底层的kryo序列化机制则默认支持传递引用参数。另外传输对象时也不是一定需要注册,调用getKryo().setRegistrationRequired(false)即可免除注册对象。
分享到:
相关推荐
tomcat kryo序列化,msm-memcached-session-manager-tc7-1.8.2
akka-kryo-serialization, 基于Kryo的Akka序列化 akka-kryo-serialization-- Scala 和Akka基于kryo的序列化程序这个库为 Scala 和Akka提供定制的基于kryo的序列化程序。 它可以用于更高效的akka远程处理。它还可以...
用kryo序列化对象,然后集成netty通过socket进行网络传输!通过自定义长度规则解决黏包、拆包问题!数据包格式是报文头+报文体!前4个字节是报文头,保存数据长度;后面是报文体,保存数据!
主要介绍了Kryo序列化及反序列化用法示例,小编觉得挺不错的,这里分享给大家,需要的朋友可以参考下。
kryo用于安卓程序、java端序序列化网络传输所需的jar包集合,有需要的请下载~
寒意 扩展,包括序列化程序和一组类,以简化 Kryo 在 Hadoop、Storm、Akka 等系统中的配置。兼容性版本之间不保证序列化兼容性,因此,我们不建议将其用于长期存储。 序列化高度依赖于 scala 版本兼容性和底层 Kryo ...
kryo中间件实例,内容:使用kryo使java对象object序列化成字符串,并使之反序列化为对象。 一个完整的工程,可使用eclipse导入,可运行DemoMain查看结果,有注释 资源包括依赖的kryo-2.24.0.jar、minlog-1.2.jar、...
nginx+tomcat7+session共享 kryo序列化所需要包 1.将上面所提到的包全部拷贝到tomcat的lib下(三台tomcat都需要) 2.修改每台tomcat的conf目录下得context.xml文件或者server.xml文件,在其中加入如下任意一段代码...
Memchached+Tomcat6|7session共享 kryo序列化所需要包 (已经更新至1.8.2版本) 1.将所有的包拷贝至tomcat目录下的lib下面; 2.修改conf/context.xml加下面的代码: memcachedNodes="n1:127.0.0.1:11211" ...
主要介绍了java原生序列化和Kryo序列化性能实例对比分析,涉及Java和kryo序列化和反序列化相关实例,小编觉得很不错,这里分享给大家,希望给大家一个参考。
kryo 高性能java对象序列化
KryoCocoa 是 Kryo 高性能 Java 序列化框架的 Objective-C 移植版本,兼容 Java 版本的序列化格式。示例代码:Kryo *kryo = [Kryo new]; // ... NSOutputStream *outputStream = [NSOutputStream ...
akka-kryo-serialization:针对Akka的基于Kryo的序列化
Kryo 是一个快速高效的Java对象图形序列化框架,主要特点是性能、高效和易用。该项目用来序列化对象到文件、数据库或者网络。示例代码:Kryo kryo = new Kryo(); // ... Output output = new Output(new...
Kryo 是一个快速高效的Java对象图形序列号框架,主要特点是性能、高效和易用。该项目用来序列化对象到文件、数据库或者网络。
Memcached-session-manager所需的jar包-tomcat7-kryo序列