java flash 压缩_Java和flash通信中数据的zlib压缩与解压缩
由于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压缩与解压缩相关推荐
- BT通信中数据下载的分析和实现
2009-08-21 14:36 BT通信中数据下载的分析和实现 关键字: Redeployment zlib 单态 AOP LightboxBT通信技术作为一种优秀的P2P下载技术,在目前的文件共享 ...
- java读取word表格中的数据_JAVA获取word表格中数据的方案
上一个项目的开发中需要实现从word中读取表格数据的功能,在JAVA社区搜索了很多资料,终于找到了两个相对最佳的方案,因为也得到了不少网友们的帮助,所以不敢独自享用,在此做一个分享. 两个方案分别是: ...
- java 解析括号_Java如何解析括号中的负数?
在金融应用中,负数通常用括号表示.在这篇文章中,我们将学习如何解析或转换括号中的负数以产生表示的数字值.要将文本/字符串解析为数字,我们可以使用java.text.DecimalFormat该类. 在 ...
- java ee 修改_java ee 在数据库中执行增删改查
1.先建一个主页面里面包含着添加方法 学生信息 {//1.连接数据库// 1)加载驱动 Class.forName("oracle.jdbc.driver.OracleDriver" ...
- java list 最小值_Java 实例 – 查找 List 中的最大最小值
Java 实例 - 查找 List 中的最大最小值 以下实例演示了如何使用 Collections 类的 max() 和 min() 方法来获取List中最大最小值: /* author by w3c ...
- java soap附件_java - 附件在SoapUI中工作,但在Java中不能使用SAAJ API吗? - 堆栈内存溢出...
我能够使用SoapUI附加一个完全相同的SOAP Request的zip文件,但不能使用SAAJ Api的Java. 这是我在SOAPUI和JAVA中使用的SOAP请求: projectName ci ...
- java 链表 传递_java 链表 传递过程中的问题
具体情况如下一共有三个类,分别是主类main,从TXT文件中读取入链表的类read,还有一个是对链表内容进行查询的类inquiryread读取并没有问题,read中有加入检测M.List.add(A) ...
- java json相加_JAVA,当某个json数据中一个字段与另一个json数据中的字段值相同时,对两个json进行合并且相加,...
展开全部 要判断json数据的字段62616964757a686964616fe78988e69d8331333365636634与其他数据是否相同,那么肯定是要先解析json数据.解析json数据的 ...
- 如何用java创建超链接_Java如何在PPT中的幻灯片上创建超链接?
在Java编程中,如何在PPT中的幻灯片上创建超链接? 注意:需要访问网址:http://poi.apache.org/download.html , 下载一个Apache POI软件包.这里下载最新 ...
最新文章
- 划分vlan,制作trunk口。使同一vlan能互相通讯
- Linux下通过源码编译安装程序
- 程序猿个人发展(公司群分享)
- mongo connections url string 的问题
- php程序访问mysql数据实现查询_PHP+MySql实现后台数据的读取
- 2017.6.5 YY的GCD 失败总结
- Java垃圾回收器的工作原理
- Java学习之路 之 提问及解决篇
- obd协议 混动车_最新人工智能驾考系统OBD信号采集模块
- SQL Server从入门到精通pdf
- 织梦dedecms包装设计生产公司网站模板(中英文版)
- mac用u盘安装linux系统教程视频,教你如何用u盘重装mac系统教程
- PHP控制连接打印机
- DELL win10插入耳机后声音仍然外放(亲测有效)
- python往word文档中写入表格、段落、标题、图片...(超级全)
- table表格表头单元格添加斜线
- 【IoT】创业:确保硬件创业成功的 6 个关键业务
- 解读《A Regularized Deep Learning Approach for Clinical Risk Prediction of Acute Coronary Syndrome》
- pic12f1823单片机入门_PIC单片机新手快速入门
- dlib.get_frontal_facedetector UINT8 和float格式互相转换
热门文章
- 向量距离汇总(连续值与离散值),Latex与Python实现
- 吉林省高等学校计算机水平考试,关于2014年11月高等学校计算机水平考试(吉林省考区)报名的通知...
- 昂贵的聘礼(枚举区间+最短路)
- 0514JS操作document对象、事件、(this)
- css td 溢出改为省略号
- dispatch_after中时间的计算
- android UI开源库
- Asp.net页面之间传递参数的几种方法
- DropDownList and ListBox 两级联动菜单
- linux内核剪裁 4412,itop4412开发板-Linux内核的编译