- 浏览: 716687 次
- 性别:
- 来自: 深圳
文章分类
- 全部博客 (389)
- flex (150)
- java (55)
- flex_sharedObject (4)
- iphone/android (7)
- red5 (4)
- blazeds (19)
- ajax (3)
- flex&java (9)
- 聊天室 (2)
- flex的问题 (1)
- game (8)
- flex_xml (1)
- flex组件学习 (2)
- JGroups (1)
- 中转站 (2)
- ruby (7)
- flex_js (5)
- C/C++ (14)
- perl (2)
- db (13)
- air (10)
- hibernate (8)
- flash_flex_as_3d (2)
- struts (4)
- dwr (8)
- freemarker (2)
- AS (22)
- 工具 (6)
- js_jquery_ext_yui (4)
- .net (1)
- C# (1)
- 前端 (1)
最新评论
-
136900923:
您好,您的代码我不是很懂,我想跟您交流一下,我的qq邮箱:13 ...
hibernate做无限极菜单树如此简单 -
fykyx521:
两个同一个功能
flex_flush_Socket 安全沙箱解决 -
ustb:
你上下两个代码类之间没关系
flex_flush_Socket 安全沙箱解决 -
u010656335:
...
flex发送QQ表情 -
u010656335:
flex发送QQ表情
http://www.5uflash.com/flashjiaocheng/Flashyingyongkaifa/2938.html
上篇文章介绍和如何在java中将数据封装成flash可以直接读取的amf格式,amf虽然已经“压缩”过了(相对其他xml、json等,由于基于二进制而且比较少冗余数据,体积会小很多)。
但是还可以进一步压缩的,由于as3的bytearray支持compress和uncompress。所以我们可以在Java端将数据压缩,然后在flash端读取再解压缩,这样数据在传输过程中又会小很多。
下面就介绍使用方法,基于前篇文章的范例:
服务端:
import java.io.BufferedWriter;
import java.io.ByteArrayOutputStream;
import java.io.DataOutputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.zip.Deflater;
import java.util.zip.DeflaterOutputStream;
import java.util.zip.Inflater;
import java.util.zip.ZipFile;
import java.util.zip.ZipInputStream;
import flex.messaging.io.SerializationContext;
import flex.messaging.io.amf.Amf3Output;
import flex.messaging.log.Log;
import flex.messaging.messages.Message;
public class Test {
/**
* @param args
*/
public static void main(String[] args)
{
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");
try
{
amfOut.writeObject(map);
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();
messageBytes=compressBytes(messageBytes); //将数据进行压缩
System.out.println("OK");
}catch(Exception e)
{
System.out.println("error :" + e);
}
}
private static int cachesize = 1024;
private static Inflater decompresser = new Inflater();
private static Deflater compresser = new Deflater();
public static byte[] compressBytes(byte input[])
{
compresser.reset();
compresser.setInput(input);
compresser.finish();
byte output[] = new byte[0];
ByteArrayOutputStream o = new ByteArrayOutputStream(input.length);
try
{
byte[] buf = new byte[cachesize];
int got;
while (!compresser.finished())
{
got = compresser.deflate(buf);
o.write(buf, 0, got);
}
output = o.toByteArray();
} finally
{
try
{
o.close();
} catch (IOException e)
{
e.printStackTrace();
}
}
return output;
}
public static byte[] decompressBytes(byte input[])
{
byte output[] = new byte[0];
decompresser.reset();
decompresser.setInput(input);
ByteArrayOutputStream o = new ByteArrayOutputStream(input.length);
try
{
byte[] buf = new byte[cachesize];
int got;
while (!decompresser.finished())
{
got = decompresser.inflate(buf);
o.write(buf, 0, got);
}
output = o.toByteArray();
}catch(Exception e)
{
e.printStackTrace();
}finally
{
try
{
o.close();
} catch (IOException e)
{
e.printStackTrace();
}
}
return output;
}
}
客户端:
public class AMF3Test extends Sprite
{
private var loader:URLLoader;
public function AMF3Test()
{
loader=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;
byte.uncompress() //将数据进行解压缩
var obj:Object=byte.readObject();
var end:Number=getTimer();
trace("耗时:"+(end-start)+"毫秒")
trace(obj.name,obj.age,obj.arr.length)
}
}
发表评论
-
C# 调用java同步类
2010-05-10 09:12 2133NetConnection 是发送的异步http请求, ... -
java C#相互调用的全新方式
2010-05-08 02:53 3197原来就是flex 和C#通讯的框架fluorinefx ... -
BlazedsUtil 测试类
2009-12-01 18:47 829package cn.ishion.util; //很简单, ... -
blazes NetConnection.Call.BadVersion
2009-11-01 22:00 1599<mx:RemoteObject destination ... -
java amf
2009-10-25 18:41 1281http://www.5uflash.com/flashjia ... -
spring-blazeds
2009-09-22 11:09 1065http://www.riameeting.com/node/ ... -
Netconnection连接blazeds
2009-09-11 18:13 1054package { import flash.event ... -
blzeds+hibernate+flex保存对象失败
2009-09-09 14:16 1747session.saveOrupdate(Object obj ... -
blazeds_Detected duplicate HTTP-based FlexSessions
2009-09-09 00:41 3586http://blog.sina.com.cn/s/blog_ ... -
blazeds-data-push-with-remote-objects
2009-07-01 19:10 1726http://codeofdoom.com/wordpress ... -
blazeds向客户端推送数据
2009-07-01 19:02 3259blazeds推送技术至Flex zz 转自http:// ... -
blazeds服务器给客户端发送消息
2009-07-01 18:57 1680private String clientID = UUIDU ... -
blazeds AMFConnection java client
2009-06-30 10:30 2310客户端 as AmFconnection http://aca ... -
flex _blazeds之动态配置message
2009-06-26 09:28 2056api说的继承这个就可以。基本是官方的例子 package ... -
flex调用java方法注意地方
2009-05-23 17:13 2880java代码中不能写重载的方法,否则flex不会调用,写不报错 ... -
blazeds在服务器端取得发送消息内容
2009-05-12 10:01 1901突发奇想看了下源代码,写了个简单的类,因为 messaging ... -
flex message suptopic filter使用subtopic过滤信息
2009-05-09 03:17 1484官方说明,看的真晕,谁有blazeds中文翻译麻烦给一份 I ... -
blazeds message filter 过滤消息——在聊天室的应用
2009-05-09 02:09 3823代码都是官方的,因为我在本地测试,所以得设置channelSe ...
相关推荐
在实际项目中,AMF常用于Flex或Flash客户端与PHP、Java、Python等服务器端之间的数据交互,尤其是在实时性要求较高的游戏或Web应用程序中。因此,熟悉AMF解析构造不仅可以提升易语言编程能力,还能增强跨平台的Web...
- AMF分为两种类型:AMF0和AMF3,其中AMF3提供了更好的压缩和性能。 2. **Flex与AMF通信** - Flex应用通常通过HTTP/HTTPS与服务器通信,使用AMF协议封装数据,通过Flash Player发送到服务器。这些请求可能包括...
AMF0是早期版本,而AMF3在性能和压缩率上有所提升。AMF能够序列化各种数据类型,包括字符串、数字、日期、对象等,且支持自定义类的序列化。 3. Flex与Java的连接:在Flex与Java通信中,通常使用 BlazeDS 或 ...
- AMF有AMF0和AMF3两个版本,AMF3提供了更好的压缩和效率。 - AMF数据类型包括Number、Boolean、String、Object、Array、Date、Null、Undefined和Mixed Array等。 - AMF数据是二进制的,因此需要解码才能读取和...
AMF支持两种版本,AMF0和AMF3,其中AMF3提供了更好的压缩和性能。 3. **HTTP、HTTPS和WebSockets** Flex和Java可以通过HTTP或HTTPS协议进行通信,这是最常见的方式,适用于大多数跨域场景。BlazeDS支持通过...
结合"Client"这个压缩包子文件名,我们可以猜测这是一个客户端相关的实现,可能包含了一个使用socket进行网络通信,并且使用AMF3进行数据编码和解码的示例代码。在实际应用中,这样的客户端可能需要连接到服务器,...
在Java中,可以使用 BlazeDS 或 GraniteDS 这样的开源项目来实现AMF支持,它们提供了与Flex客户端进行AMF通信的服务器端组件。 描述中提到的“NULL”可能意味着这篇博文主要关注的是具体的技术实现,而不是提供详细...
实现Flash和Java的数据交互通常有两种主要方式:Socket通信和AMF(Action Message Format)。 1. **Socket通信**:Flash Player支持TCP和UDP Socket通信,可以与Java服务器建立直接的网络连接。Java服务器端可以...
AMF不仅压缩数据,还支持序列化,使得对象能在客户端和服务器之间直接传递,大大简化了数据交换的过程。 在Flex与Java交换数据时,通常需要以下步骤: 1. **设置环境**:确保你有Apache BlazeDS或Adobe LiveCycle ...
当不使用AMF时,Flex可以借助HTTPService或WebService组件与Java进行XML或JSON数据交换。这种方式适用于跨域通信,但相比AMF,数据传输效率较低。 5. Flex客户端实现: 在Flex项目中,使用HTTPService或Web...
在压缩包子文件的文件名"help&Api"来看,我们可以推测这个压缩包至少包含两部分:帮助文档和API参考。"help"可能是一系列的教程、指南或者常见问题解答,旨在帮助开发者理解和使用Flex与Java的集成技术。而"Api"很...
AMF有两种主要的版本:AMF0和AMF3,AMF3提供更好的压缩率和更高的性能,常被用于新的Flash Player版本。 二、OpenAMF:开源实现的AMF框架 OpenAMF是Java平台上实现的AMF库,允许开发者在服务器端处理来自Flash...
总结来说,Flex调用Java方法的关键在于使用Blazeds提供的Remoting服务,通过AMF(Action Message Format)通道,实现Flex客户端与Java服务器之间的高效双向通信。在Java端创建可序列化的实体类和业务处理类,同时在...
在这个文件中,你可以配置Flex客户端与Java服务端通信的具体方式,例如AMF(Action Message Format)通道,以及服务的发布和安全设置。 **其他注意事项** 如果你计划在WebSphere上部署,还需要配置资源引用以支持...
例如,使用HTTPS确保通信安全,对AMF数据进行压缩减少网络传输开销,以及合理设计服务接口以减少不必要的数据交换。 8. **调试与日志**: 开发过程中,利用Flex的Debug Flash Player和服务器端的日志记录工具,...
2. **数据交互**:使用AMF(Action Message Format)协议进行Java和Flex之间的数据传输,包括配置服务端的Servlet或Spring Bean,以及客户端的Proxy服务。 3. **Flex组件使用**:介绍Flex UI组件的创建和使用,如...
Adobe的 BlazeDS 和 LCDS 服务支持AMF,可以实现Flex与Java之间的快速、低开销的数据交换。在Flex中,我们可以使用`RemoteObject`组件来连接到BlazeDS服务,然后调用Java服务的方法,传递和接收参数。 2. **配置...