Smack:Packet属性

Smack提供了一个简单地机制向packet附加任意属性。每个属性有一个字符串名称,和一个Java原始类型(int,long,flat,double,boolean)的值或者任何可序列化的对象(一个对象当他实现了Serializable接口的时候是可序列化的)。 

 

使用API 

所有主要对象有属性支持,例如Message对象。下面的代码演示了如何设置属性: 

Message message = chat.createMessage();  
// Add a Color object as a property. 
message.setProperty("favoriteColor", new Color(0, 0, 255));  
// Add an int as a property. 
message.setProperty("favoriteNumber", 4); 
chat.sendMessage(message); 
获取这些属性应该使用下面的代码:  

Message message = chat.nextMessage();  
// Get a Color object property. 
Color favoriteColor = (Color)message.getProperty("favoriteColor");  
// Get an int property. Note that properties are always returned as  
// Objects, so we must cast the value to an Integer, then convert  
// it to an int.  
int favoriteNumber = ((Integer)message.getProperty("favoriteNumber")).intValue();
对象做为属性  

使用对象作为属性值是一个非常强大且简单地的数据交换方式。然而,你应该记住如下: 

  • packet扩展名是向XMPP节添加额外的数据比较标准的方式。使用属性可能在某些情况下更方便,可是,Smack将执行处理XML的工作。 

  • 当你以一个Java对象作为属性的时候,仅仅运行java的客户端能翻译这个数据。所以,考虑使用一系列原始的值来传输数据替代。 

  • 作为属性值的对象必须实现Serialiable。此外,发送者和接收者必须有这个类的最新版本,不然当序列化这个对象的时候将会产生一个serialization异常。 

  • 序列化对象能十分大,它将使用更多的带宽和服务器资源。 

 

XML格式 

当前用于发送属性数据的XML格式不是一个标准,所以在没有使用smack的客户端将可能无法识别。这个XML如下面所示(清晰的添加注释): 

<!-- All properties are in a x block. -->  
<properties xmlns="http://www.jivesoftware.com/xmlns/xmpp/properties">  
<!-- First, a property named "prop1" that's an integer. -->  
    <property>  
        <name>prop1</name>  
        <value type="integer">123</value>  
    <property>  
<!-- Next, a Java object that's been serialized and then converted from binary data to base-64 encoded text. -->  
    <property>  
        <name>blah2</name> 
        <value type="java-object">adf612fna9nab</value>  
    <property>  
</properties>  
当前支持的类型是:integer,long,float,double,boolean,string,和java-object。  

新技术,新未来!欢迎大家关注 “1024工场”微信服务号 ,时刻关注我们的最新的技术讯息! (甭客气!尽情的扫描或者长按!)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值