webgame开发中的文件解密

webgame开发中的文件解密上一篇讲的是文件的加密,这一篇记录一下如何加载并显示图片。 因为图片文件经过加密,已经成了二进制流的文件了(一堆乱码),只能使用URLStream来加载资源了。这里有一点要注意:URLStream中的读取操作是非阻塞的,在读取数据之前必须使用bytesAvailable属性来确定是否能够获取足够的数据,如何不能获取足够的数据,将引发EOFError异常。 主要思路:1、加载…

大家好,又见面了,我是你们的朋友全栈君。

上一篇讲的是文件的加密,这一篇记录一下如何加载并显示图片。

 

因为图片文件经过加密,已经成了二进制流的文件了(一堆乱码),只能使用URLStream来加载资源了。

这里有一点要注意:URLStream中的读取操作是非阻塞的,在读取数据之前必须使用bytesAvailable属性来确定是否能够获取足够的数据,如何不能获取足够的数据,将引发EOFError异常。

 

主要思路:

1、加载加密后的资源,使用URLStream

2、调用解密方法,获取解密后的数据

3、使用Loader类的loadBytes方法加载资源

 

   1: var urlLoader:URLStream = new URLStream();
   2: var url:String = getEncryptURL(url);    //通过需要加载的资源url,来获取实际需要加载的资源地址,如xx.png实际将请求xx.p
   3:  
   4: //监听urlLoader的事件
   5: //Event.Complete、IOErrorEvent.IO_ERROR、ProgressEvent.PROGRESS、HTTPStatusEvent.HTTP_STATUS、Event.OPEN
   6:  
   7: var req:URLRequest = new URLRequest(url);
   8:  
   9: urlLoadedCount = 0;
  10:  
  11: urlLoader.load(req);
  12:  
  13:  
  14:  
  15:  
  16:  
  17: //onCompleteHandler方法中
  18: var byte:ByteArray;
  19: var byteLen:int;
  20:  
  21: try 
  22: {
    
    
  23:     byteLen = urlLoader.bytesAvailable;
  24: }
  25: catch(e:Error)
  26: {
    
    
  27:     if (urlLoadedCount++ > 3)
  28:     {
    
    
  29:         return ;
  30:     }
  31:     
  32:     //reload 重新加载,直至超过3次
  33:     
  34:     return ;
  35: }
  36:  
  37: urlLoadedCount = 0;
  38:  
  39: byte = new ByteArray();
  40: urlLoader.readBytes(byte, 0, byteLen);
  41: byte = EncryptUtils.DeEncrypt(byte); //对数据进行解密操作,与上一篇中的加密方法对应
  42: byte.position = 0;
  43:  
  44: //开始加载图片
  45: var loader = new Loader();
  46:  
  47: //监听Event.Complete事件
  48: loader.contentLoaderInfo.removeEventListener(Event.COMPLETE, loadImgCompleteHandler);
  49:  
  50: var context:LoaderContext = new LoaderContext();
  51: context.applicationDomain = ApplicationDomain.currentDomain;
  52: context.securityDomain = SecurityDomain.currentDomain;
  53:  
  54: loader.loadBytes(byte, context);
  55:  
  56:  
  57: //loadImgCompleteHandler方法
  58: 此时loader.content已经为Bitmap类了,使用addChild即可完成图片的加载
  59:  
  60:  
  61: //如果要加载的是xml、txt等文件内容,则无需此方法,使用byte.readUTFBytes(byte.bytesAvailable)便可得到解密后的字符串了
  62:  

 

 

更多参考:

flash.display.Loader>>

flash.display.Bitmap>>

flash.net.URLStream>>

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/133958.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 原生ajax请求的五个步骤

    原生ajax请求的五个步骤什么是ajax?通过在后台与服务器进行少量数据交换,Ajax可以使网页实现异步更新。这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新。ajax的优点:1.实现局部更新(无刷新状态下)2.减轻了服务器端的压力ajax的缺点:1.破坏了浏览器前进和后退机制(因为ajax自动更新机制)2.一个Ajax请求多了,也会出现页面加载慢的情况。3.搜索引擎的支持程度比较低。4.ajax的安全性问题不太好(可以用数据加密解决)。注:如果要使用ajax必须要有后端环境的支持(服务器端)。

    2022年5月17日
    187
  • windows安装深度linux,最漂亮的国产Linux,windows下安装深度操作系统步骤

    windows安装深度linux,最漂亮的国产Linux,windows下安装深度操作系统步骤GIF国产操作系统都是基于Linux进行的二次开发,有很多国产系统只是在Linux基础上进行一些美化、内置几个软件就号称自己是操作系统了。而为什么深度操作系统deepinLinux一直深受用户喜爱呢?虽然它也是基于Linux内核,但它的整个系统架构设计都是自己研发制作的。从显示管理器、资源管理器再到桌面环境及比较实用的深度全家桶,在这个系统上,你不仅可以Linux原生的软件,还可以使用QQ、TI…

    2022年5月13日
    68
  • Python矩阵计算

    Python矩阵计算1、构建矩阵*1)、集合形式建立矩阵asmatrix()函数。(1)数组形式建立矩阵函数matrix(data,dtype=None,copy=True),data为数值类型的集合对象,dtype指定输出矩阵的类型,copy=True进行深度拷贝建立全新的矩阵对象,copy=False仅建立基于集合对象的视图(深度拷贝、视图的原理见5.2节内容)。功能类似于mat()函数、importnumpyasnpa=np.array([[1,2,3],[4,5,6],[7,8,9]])

    2022年6月28日
    40
  • notepad++正则表达式替换字符串

    notepad++正则表达式替换字符串则表达式是一个查询的字符串,它包含一般的字符和一些特殊的字符,特殊字符可以扩展查找字符串的能力,正则表达式在查找和替换字符串的作用不可忽视,它能很好提高工作效率。EditPlus的查找,替换,文件中查找支持以下的正则表达式:表达式说明/t制表符./n新行..匹配任意字符.|匹配表达式左边和右边的字符.例如,”ab|bc”匹配”ab”或者”bc”….

    2022年5月17日
    45
  • 金山词霸2003闪烁问题。

    金山词霸2003闪烁问题。

    2021年7月25日
    74
  • JAVA基础:二维数组初始化

    JAVA基础:二维数组初始化二维数组的初始化同一维数组初始化类似,同样可以使用”{}”大括号完成二维数组的初始化,不同的是每个一维数组的元素使用大括号定义新的一维数组,即一维数组的每个元素又是一个新的一维数组。定义一个二维数组:把二维数组所有的赋同一个初始化值arrayType[][]arrayName=new arrayTyp[n][m];for(inti=0;iarrayName.l

    2022年5月26日
    53

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号