上一篇講的是文件的加密,這一篇記錄一下如何加載並顯示圖片。
因爲圖片文件經過加密,已經成了二進制流的文件了(一堆亂碼),只能使用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:
更多參考: