由于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 map=new HashMap();

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)

}

}

java flash 压缩_Java和flash通信中数据的zlib压缩与解压缩相关推荐

  1. BT通信中数据下载的分析和实现

    2009-08-21 14:36 BT通信中数据下载的分析和实现 关键字: Redeployment zlib 单态 AOP LightboxBT通信技术作为一种优秀的P2P下载技术,在目前的文件共享 ...

  2. java读取word表格中的数据_JAVA获取word表格中数据的方案

    上一个项目的开发中需要实现从word中读取表格数据的功能,在JAVA社区搜索了很多资料,终于找到了两个相对最佳的方案,因为也得到了不少网友们的帮助,所以不敢独自享用,在此做一个分享. 两个方案分别是: ...

  3. java 解析括号_Java如何解析括号中的负数?

    在金融应用中,负数通常用括号表示.在这篇文章中,我们将学习如何解析或转换括号中的负数以产生表示的数字值.要将文本/字符串解析为数字,我们可以使用java.text.DecimalFormat该类. 在 ...

  4. java ee 修改_java ee 在数据库中执行增删改查

    1.先建一个主页面里面包含着添加方法 学生信息 {//1.连接数据库// 1)加载驱动 Class.forName("oracle.jdbc.driver.OracleDriver" ...

  5. java list 最小值_Java 实例 – 查找 List 中的最大最小值

    Java 实例 - 查找 List 中的最大最小值 以下实例演示了如何使用 Collections 类的 max() 和 min() 方法来获取List中最大最小值: /* author by w3c ...

  6. java soap附件_java - 附件在SoapUI中工作,但在Java中不能使用SAAJ API吗? - 堆栈内存溢出...

    我能够使用SoapUI附加一个完全相同的SOAP Request的zip文件,但不能使用SAAJ Api的Java. 这是我在SOAPUI和JAVA中使用的SOAP请求: projectName ci ...

  7. java 链表 传递_java 链表 传递过程中的问题

    具体情况如下一共有三个类,分别是主类main,从TXT文件中读取入链表的类read,还有一个是对链表内容进行查询的类inquiryread读取并没有问题,read中有加入检测M.List.add(A) ...

  8. java json相加_JAVA,当某个json数据中一个字段与另一个json数据中的字段值相同时,对两个json进行合并且相加,...

    展开全部 要判断json数据的字段62616964757a686964616fe78988e69d8331333365636634与其他数据是否相同,那么肯定是要先解析json数据.解析json数据的 ...

  9. 如何用java创建超链接_Java如何在PPT中的幻灯片上创建超链接?

    在Java编程中,如何在PPT中的幻灯片上创建超链接? 注意:需要访问网址:http://poi.apache.org/download.html , 下载一个Apache POI软件包.这里下载最新 ...

最新文章

  1. 划分vlan,制作trunk口。使同一vlan能互相通讯
  2. Linux下通过源码编译安装程序
  3. 程序猿个人发展(公司群分享)
  4. mongo connections url string 的问题
  5. php程序访问mysql数据实现查询_PHP+MySql实现后台数据的读取
  6. 2017.6.5 YY的GCD 失败总结
  7. Java垃圾回收器的工作原理
  8. Java学习之路 之 提问及解决篇
  9. obd协议 混动车_最新人工智能驾考系统OBD信号采集模块
  10. SQL Server从入门到精通pdf
  11. 织梦dedecms包装设计生产公司网站模板(中英文版)
  12. mac用u盘安装linux系统教程视频,教你如何用u盘重装mac系统教程
  13. PHP控制连接打印机
  14. DELL win10插入耳机后声音仍然外放(亲测有效)
  15. python往word文档中写入表格、段落、标题、图片...(超级全)
  16. table表格表头单元格添加斜线
  17. 【IoT】创业:确保硬件创业成功的 6 个关键业务
  18. 解读《A Regularized Deep Learning Approach for Clinical Risk Prediction of Acute Coronary Syndrome》
  19. pic12f1823单片机入门_PIC单片机新手快速入门
  20. dlib.get_frontal_facedetector UINT8 和float格式互相转换

热门文章

  1. 向量距离汇总(连续值与离散值),Latex与Python实现
  2. 吉林省高等学校计算机水平考试,关于2014年11月高等学校计算机水平考试(吉林省考区)报名的通知...
  3. 昂贵的聘礼(枚举区间+最短路)
  4. 0514JS操作document对象、事件、(this)
  5. css td 溢出改为省略号
  6. dispatch_after中时间的计算
  7. android UI开源库
  8. Asp.net页面之间传递参数的几种方法
  9. DropDownList and ListBox 两级联动菜单
  10. linux内核剪裁 4412,itop4412开发板-Linux内核的编译