`
hereson
  • 浏览: 1449816 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

Java和flash通信中数据的AMF3封装

阅读更多

Flash加载外部http数据有很多封装方式,常用的数据封装格式有xml SOAP、json、webService和amf等。其中前面三个都是互联网通用的基于字符串的格式,而AMF是Adobe独家开发出来的封装格式,它和其他格式不一样的地方是基于二进制的,而且这种格式是Flash可以读取的。它的优点也显露出来了:1、由于基于二进制,而且没有像xml那样很多的冗余数据,传输同样的数据量体积会小很多。2、数据传输到Flash端可以直接读取,无需进行字符串解释等反序列化过程,效率也提高了。(amf有两种格式:AMF0和AMF3;Flash8之前的版本只支持AMF0,Flash9支持两种格式、不过flash使用AMF3应该效率会高点,因为AMF0是兼容之前版本用的) 
然而amf是Adobe独家开发的,如果不清楚它的数据封装格式就无法用其它后台语言将数据封装成amf再传输到flash那里。然而目前有很多开源的框架支持amf,如php的amfphp、java的openamf等。 
Adobe前段时间发布一个名为“BlazeDS”的开源的Flash数据访问项目,各位可以去adobe官方网站下载研究。它的功能和adobe livecycle data services类似,只是提供开源并且少了rtmp通信方面的功能。 
关于AMF3封装的类就存在BlazeDS的flex.messaging.io.amf包里面,其中几个比较重要的类有(Amf3Output、Amf3Input等,如果想兼容flash8之前版本请使用Amf0Output和Amf0Input)。 
如果各位想用AMF3格式又不想使用Flex的remoting功能,可以手动封装AMF格式。下面简单介绍一下怎样在java中amf的封装: 
Java端代码:(封装一个Object对象,Object保存了name=weni;age=27;web=www.weni.cn 以及一个长度为10000的数组,然后将对象保存到一个文本文件里面) 

SerializationContext serializationContext=new SerializationContext(); 
Amf3Output amfOut = new Amf3Output(serializationContext); 
    ByteArrayOutputStream outStream = new ByteArrayOutputStream(); 
    DataOutputStream dataOutStream = new DataOutputStream(outStream); 
    amfOut.setOutputStream(dataOutStream); 
     
    HashMap<String, Object> map=new HashMap<String, Object>(); 
    Double[] arr=new Double[10000]; 
    for(int index=0;index<10000;index++) 
    { 
     arr[index]=Math.random(); 
    } 
    map.put("arr", arr); 
    map.put("name", "weni"); 
    map.put("age", "27"); 
    map.put("web", "www.weni.cn"); 
    try 
    { 
amfOut.writeObject(map); //写入java HashMap对象,会自动转换成Flash的Object对象 
dataOutStream.flush(); 
} catch (IOException e) 

e.printStackTrace(); 


    byte[] messageBytes = outStream.toByteArray(); 
    try  
    {  
      FileOutputStream  os;  
      OutputStreamWriter  ow;  
      BufferedWriter  out;  
      os  =  new  FileOutputStream("D://test.txt");  
      ow  =  new  OutputStreamWriter(os);  
      out  =  new  BufferedWriter(ow);  
      os.write(messageBytes); 
      os.flush(); 
      os.close();  
      System.out.println("OK"); 
}catch(Exception  e)  

System.out.println("error  :"  +  e);                       



客户端读取代码: 
var loader:URLLoader=new URLLoader(); 
loader.load(new URLRequest("D://test5.txt")); 
loader.addEventListener(Event.COMPLETE,onComplete); 
loader.dataFormat=URLLoaderDataFormat.BINARY; 
private function onComplete(evt:Event):void 

var start:Number=getTimer(); 
var byte:ByteArray=loader.data as ByteArray; 
var obj:Object=byte.readObject(); //读取出来的对象 
var end:Number=getTimer(); 
trace("耗时:"+(end-start)+"毫秒") 
trace(obj.name,obj.age,obj.arr.length) 

分享到:
评论

相关推荐

    AMF抓取flex页面数据

    这需要理解Flex应用的逻辑和数据结构,通过发送AMF请求模拟用户交互。例如,使用编程语言(如Python、Java)编写脚本,构造AMF消息并发送到服务器,然后解析返回的数据。 6. **Flex数据解码** - 对于AMF数据的解码...

    socket+AMF3

    客户端可能是一个Flash应用,它使用AMF3来编码数据,将这些数据封装在socket的发送缓冲区中,发送到服务器。服务器端接收到数据后,会先解析AMF3编码的二进制流,还原出原始的命令或数据,然后执行相应的业务逻辑。 ...

    flex与java通信的完整demo

    Flex与Java通信是Web开发中的一个重要技术组合,它允许用户在浏览器端利用Flash的富互联网应用(RIA)特性,通过ActionScript与服务器端的Java应用程序进行数据交互。本压缩包包含了一个完整的Flex与Java通信的示例...

    Java新手上路Flash教程

    Java和Flash是两种在互联网应用开发中非常重要的技术。Java是一种多平台的、面向对象的编程语言,而Flash则是用于创建交互式动画、图形和应用程序的工具,尤其在网络媒体领域有着广泛的应用。这个"Java新手上路Flash...

    用BlazeDS实现Java和Flex通信

    4. **BlazeDS**:Adobe提供的开源项目,提供Java AMF3格式的封装方法。 以下是一个简单的步骤指南: 1. **配置Tomcat服务器**:在MyEclipse中配置Tomcat 6.0服务器,确保其正常运行。 2. **部署BlazeDS**:解压...

    Flex与Java通信实例程序(分工程实现)

    Flex与Java之间的通信是Web开发中的重要一环,特别是在构建富互联网应用程序(RIA)时。本实例程序展示了如何在Flex前端和Java后端之间通过XML进行数据交换,从而实现两个不同工程之间的协作。 Flex是一种基于...

    Building Flex and Java based CRUD application using Flash Builder4

    在Java环境中,我们需要创建对应的实体类(如User、Product等)和数据访问对象(DAO)。DAO类将封装对数据库的CRUD操作,例如使用JDBC或ORM框架如Hibernate执行SQL语句。 步骤5:实现Flex与Java的交互 在Flex应用中...

    flex和java进行CRUD操作(转贴)

    在Flex中,可以创建一个表单来收集用户输入的数据,然后使用ActionScript将这些数据封装成对象,通过AMF调用Java服务的创建方法。Java服务接收到数据后,可以使用JDBC或ORM框架如Hibernate来插入数据库。 4. **...

    Flex blazeds封装实体

    总结起来,Flex BlazDS封装实体是实现Flex与Java后端数据交互的关键技术,它简化了数据绑定、服务调用和数据管理的过程,极大地提高了开发效率和应用性能。通过熟练掌握这一技术,开发者可以构建出功能强大、用户...

    flex与java交互源码

    Flex与Java交互是Web开发中的常见技术,尤其在构建富客户端应用时,它允许前端的Flex界面与后端的Java服务器进行数据交换和业务逻辑处理。Flex作为一个强大的RIA(Rich Internet Applications)开发框架,提供了丰富...

    Flex与Java通过实体传递数据

    Flex是Adobe开发的一个开源框架,用于构建动态、交互式的用户界面,而Java则是一种广泛使用的后端编程语言,常用于处理业务逻辑和数据管理。 在Flex和Java之间传递数据时,通常采用AMF(Action Message Format)或...

    使用granite实现flex交互java

    AMF是一种轻量级的二进制数据格式,特别适合在Web服务中传输数据,因为它比JSON和XML更快、更小。AMF可以将ActionScript对象直接转换为Java对象,反之亦然,极大地提高了数据交换的效率。 5. **Granite的集成与...

    java-flex-mysql

    在这个项目中,Java作为服务器端的技术,负责处理业务逻辑和数据访问。开发者可能使用Spring框架来管理依赖和提供服务,Struts或Spring MVC来处理HTTP请求,以及Hibernate或MyBatis等ORM(对象关系映射)工具来与...

    flash 提交例子

    3. **数据封装**:ActionScript将表单数据转换为服务器能理解的格式,如XML或AMF。AMF是一种高效的数据序列化格式,常用于Flash与服务器之间的数据交换。 4. **网络通信**:使用`XMLSocket`类或`URLLoader`类发起...

    基于Flex on java的客户关系系统

    远程对象(RemoteObject)是Flex与后台服务通信的一种机制,它封装了AMF(Action Message Format)协议,这是一种高效的二进制数据交换格式,用于在Flex客户端和Java服务之间传递数据。AMF能够显著提高数据传输效率...

    flash 调用数据库轮换图片

    3. **数据库连接**:在服务器端,我们需要建立一个能与数据库交互的接口,例如PHP、Java或ASP.NET,这些后端语言可以连接到数据库,查询图片信息,然后将结果封装成XML或AMF格式响应给Flash。 4. **图片轮换逻辑**...

    flex结合java

    5. **数据访问对象(DAO)和业务逻辑层(BLL)**:在Flex-Java架构中,通常Flex负责展示层,Java处理业务逻辑和数据存储。DAO用于与数据库交互,BLL则封装了业务规则和操作,Flex通过调用Java服务来执行这些操作。 ...

    jsp 论坛源码 + jsp flash留言板

    4. **数据传输格式**:Flash可能使用AMF(Action Message Format)或XML等格式来封装和解析数据,以便与服务器交换信息。 5. **安全与兼容性**:随着移动设备的普及和浏览器对Flash支持的减少,Flash留言板可能面临...

Global site tag (gtag.js) - Google Analytics