amf是Adobe独家开发的数据封装格式,Flash可以直接访问,由于它是基于二进制的数据传输,所以相对于xml SOAP、json、webService等基于字符串的数据格式,有数据体积小和效率高的特点。

amf目前有AMF0和AMF3两种格式,flash8以前版本只支持AMF0,flash9支持两种格式。AMF3比AMF0效率更高。

调试环境:

1、JDK 1.5

2、Resin 3.0

3、Flash CS3

4、flex-messaging-core.jar和flex-messaging-common.jar(这两个jar包文件可在Adobe的开源项目BlazeDS中找到)

Flash客户端代码:

/**

* ...

* @author Kinglong

* @version 0.1

*/

package project.test {

import flash.display.*;

import flash.events.*;

import flash.net.*;

import flash.utils.*;

public class TestAMF extends Sprite {

private var _loader:URLLoader;

public function TestAMF() {

trace("TestAMF");

_loader = new URLLoader();

_loader.dataFormat = URLLoaderDataFormat.BINARY;

_loader.addEventListener(Event.COMPLETE, loaderHandler);

_loader.addEventListener(SecurityErrorEvent.SECURITY_ERROR, loaderHandler);

_loader.addEventListener(IOErrorEvent.IO_ERROR, loaderHandler);

var request:URLRequest = new URLRequest("http://localhost:8080/ajax/servlet/test");

_loader.load(request);

}

private function loaderHandler(event:*):void {

trace(event.type);

switch(event.type) {

case Event.COMPLETE:

var start:Number=getTimer();

var byte:ByteArray = _loader.data as ByteArray;

byte.uncompress();

var obj:Object = byte.readObject();

var end:Number=getTimer();

trace("耗时:" + (end - start) + "毫秒");

trace(obj.fullName);

break;

}

}

}

}

/**
* ...
* @author Kinglong
* @version 0.1
*/
package project.test {
import flash.display.*;
import flash.events.*;
import flash.net.*;
import flash.utils.*;
public class TestAMF extends Sprite {
private var _loader:URLLoader;
public function TestAMF() {
trace("TestAMF");
_loader = new URLLoader();
_loader.dataFormat = URLLoaderDataFormat.BINARY;
_loader.addEventListener(Event.COMPLETE, loaderHandler);
_loader.addEventListener(SecurityErrorEvent.SECURITY_ERROR, loaderHandler);
_loader.addEventListener(IOErrorEvent.IO_ERROR, loaderHandler);
var request:URLRequest = new URLRequest("http://localhost:8080/ajax/servlet/test");
_loader.load(request);
}
private function loaderHandler(event:*):void {
trace(event.type);
switch(event.type) {
case Event.COMPLETE:
var start:Number=getTimer();
var byte:ByteArray = _loader.data as ByteArray;
byte.uncompress();
var obj:Object = byte.readObject();
var end:Number=getTimer();
trace("耗时:" + (end - start) + "毫秒");
trace(obj.fullName);
break;
}
}
}
}

Java服务端代码

import java.io.*;

import java.util.HashMap;

import java.util.Map;

import java.util.zip.*;

import javax.servlet.ServletException;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import flex.messaging.io.*;

import flex.messaging.io.amf.*;

public class TestServlet extends HttpServlet {

private static final long serialVersionUID = -1079073749217155506L;

private SerializationContext context = new SerializationContext();

public void doPost(HttpServletRequest request, HttpServletResponse response) throws

ServletException, IOException {

response.setContentType("application/x-gzip-compressed");

Amf3Output out = new Amf3Output(context);

DeflaterOutputStream stream = new DeflaterOutputStream(new DataOutputStream(response.getOutputStream()));

out.setOutputStream(stream);

Map map = new HashMap();

String[] arr = "1,2,3,4,5".split(",");

map.put("datas", arr);

map.put("userName","kinglong");

map.put("fullName", "金龙工作室");

map.put("domain", "klstudio.com");

out.writeObject(map);

stream.finish();

}

public void doGet(HttpServletRequest request, HttpServletResponse response) throws

ServletException, IOException {

doPost(request, response);

}

}

import java.io.*;
import java.util.HashMap;
import java.util.Map;
import java.util.zip.*;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import flex.messaging.io.*;
import flex.messaging.io.amf.*;
public class TestServlet extends HttpServlet {
private static final long serialVersionUID = -1079073749217155506L;
private SerializationContext context = new SerializationContext();
public void doPost(HttpServletRequest request, HttpServletResponse response) throws
ServletException, IOException {
response.setContentType("application/x-gzip-compressed");
Amf3Output out = new Amf3Output(context);
DeflaterOutputStream stream = new DeflaterOutputStream(new DataOutputStream(response.getOutputStream()));
out.setOutputStream(stream);
Map map = new HashMap();
String[] arr = "1,2,3,4,5".split(",");
map.put("datas", arr);
map.put("userName","kinglong");
map.put("fullName", "金龙工作室");
map.put("domain", "klstudio.com");
out.writeObject(map);
stream.finish();
}
public void doGet(HttpServletRequest request, HttpServletResponse response) throws
ServletException, IOException {
doPost(request, response);
}
}

因为AS3中的ByteArray支持zlib数据压缩和解压,所以我在服务端代码里增加数据压缩。

AMF3很适合Flash和后台服务端的数据交换,我写了这个范例,希望能给大家一参考。

as3调用java_[AS3]AMF3+JAVA的调用范例相关推荐

  1. java 调用服务器文档,JAVA远程调用服务器端方法

    JAVA远程调用服务器端方法 内容精选 换一换 Windows Server 2012 R2操作系统弹性云服务器,本地使用远程桌面连接功能连接云服务器并启用redirected drive功能时,云服 ...

  2. java进程里面调用方法_在java里面调用CUI程序的方法

    在java里面调用CUI程序的方法推荐查看本文HTML版本 在java里面调用CUI程序的方法 问题描述: 该函数在win平台上面调用不是很成功,GUI会可以调出来,但可能和屏蔽调其中的一些用 ...

  3. java怎么调用python_如何在Java中调用Python代码

    Jython(原JPython),是一个用2113Java语言写的Python解释5261器.在没有第三方模块的情况下4102,通常选择利用Jython来调用1653Python代码,它是一个开源的J ...

  4. java 调用c 的dll,java如何调用C的dll

    java怎么调用C的dll 我做了1个java调用c++的dll 想做一个java调用C的dll就不知道怎么做了 在xx.c里 写 JNIEXPORT jint JNICALL Java_testdl ...

  5. python中如何调用java_在Python程序中调用Java代码的实现

    有头发且有趣的码农万里挑一~ 14 有料叔 | 一位有故事的程序猿 前 言 开发Python程序,需求中需要用到Java码,Python作为"胶水"语言能够很好的实现这种需求.具体 ...

  6. c 通过jni调用java_使用c通过jni调用java

    编译环境: fedora16 gcc (GCC) 4.6.3 20120306 (Red Hat 4.6.3-2) java version "1.6.0_31" Java(TM) ...

  7. cocos lua调用java_【Tech-Lua】Cocos-2dx-Lua调用java的小白教程(三)

    上周五下班前,打包成功了.我很高兴,周六去踢场足球,周日去现场看了最后一分钟掉球的恒大,度过了一个愉快的周末.然后,噩梦的周一开始了. 我再次打包,打算打包就安装,但结果是失败的.为何?我周五明明成功 ...

  8. java调用nodejs程序,从java里面调用node.js脚本

    How can I call a node.js inside java and save the console.log values in a String variable? 解决方案 It i ...

  9. java方法调用机制_Java方法调用机制 - osc_bkdv2it5的个人空间 - OSCHINA - 中文开源技术交流社区...

    最近在编程时,修改方法传入对象的对象引用,并没有将修改反映到调用方法中.奇怪为什么结果没有变化,原因是遗忘了Java对象引用和内存分配机制.本文介绍3个点: ① 该问题举例说明 ② 简要阐述Java内 ...

最新文章

  1. 《学习vi编辑器》的学习笔记1
  2. c++采集声卡输出_舒尔 Shure RMCE-LTG Lightning-MMCX接口耳机线[线型声卡]测评报告 [Soomal]...
  3. 【文件系统】删除文件名中含有空格的文件
  4. IIFE(立即执行函数表达式)
  5. [cogs1065]绿豆蛙的归宿
  6. VC++ (VS2008)里面char和LPTSTR的转换问题
  7. 平安 开源 数据库 实践_自举开源业务的3个最佳实践
  8. Spring Boot:在Spring Boot中使用定时任务
  9. Android现学现用第十二天
  10. 深度学习TF—3.神经网络全连接层
  11. CentOS6.8安装oracle11gR2
  12. Python_命名空间和作用域_25
  13. 计算机视觉论文-2021-09-14
  14. 计算机十个小技巧,Win10的10个实用小技巧,电脑小白轻松掌握,大大提升工作效率...
  15. java中的抽象工厂模式
  16. 部署 - 前端部署https服务,并配置安全证书
  17. Scheme语言 入门语法
  18. vim生成连续数字列
  19. 用Xilinx的FPGA实现HDMI(DVI)接收器
  20. Tomcat使用过滤器实现页面的限制访问,登录才能访问受限页面

热门文章

  1. Dynamics CRM 提示“操作无效”
  2. 人的价值不在于能力,而在于位置 » 社区 | Ruby China
  3. 在 Windows 窗体 DataGridView 单元格中承载控件
  4. 将窗体显示在 PageControl 上。
  5. MyEclipse使用总结——设置MyEclipse开发项目时使用的JDK
  6. dojo Quick Start/dojo入门手册--dojo.hitch scope/context
  7. 转 Spring.NET 与 NHibernate 的整合
  8. PHP 数据库连接池实现
  9. 比较正宗的验证邮箱的正则表达式js代码详解
  10. ELK报错no handler found for uri原因postman的原因