純Flex 解壓Xlsx 不使用第三方庫 (三)

上一節說了xlsx怎麼獲取到我們想要的數據,但是我們還是要通過代碼來讀取,我們怎麼拿到我們想要的xml數據呢。

首先我們要知道xlsx壓縮包的數據流結構是怎麼樣的。這個我自己在研究的時候找到過一篇文章,很詳細有興趣的看下原文吧。xlsx數據流格式分析
我把數據構造截圖截過來了。
在這裏插入圖片描述
接下來我們只需要根據對應的字段內容讀取就好了。下面是flex中解析的代碼:

	bytes.endian = Endian.LITTLE_ENDIAN;
	while(true){
		var hasValue:uint = bytes.readUnsignedInt();
		//判斷文件頭
		if(hasValue != 0x04034b50){
			break ;
		}
		
		//14
		//2解壓文件所需 pkware最低版本
		//2通用比特標誌位(置比特0位=加密,詳情見後)
		//2壓縮方式(詳情見後)
		//2文件最後修改時間
		//2文件最後修改日期
		//4 CRC-32校驗碼
		bytes.position = bytes.position + 14;
		var compressSize:int = bytes.readUnsignedInt();
		var uncompressSize:int = bytes.readUnsignedInt();
		var fileNameLength:int = bytes.readUnsignedShort();
		var extendLenth:int = bytes.readUnsignedShort();
		var fileName:String = bytes.readUTFBytes(fileNameLength);
		//指針指向下一個文件位置
		bytes.position = bytes.position + extendLenth;
		
		var fileByteArray:ByteArray = new ByteArray();
		if(compressSize != 0)
		{
			bytes.readBytes(fileByteArray,0,compressSize);
		}
		
		//存儲數據
		_dict[fileName] = fileByteArray;
	}

bytes 是我們讀取到的xlsx字節流數據。
主要解析xlsx的代碼就是這個了。雖然網上庫也不少,但是感覺還是要自己弄懂了,纔是自己的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章