Project1
标题:
Marshal-指定讀取其他層資料
[打印本页]
作者:
土撥撥
时间:
2011-2-18 18:27
标题:
Marshal-指定讀取其他層資料
本帖最后由 土撥撥 于 2011-2-18 18:39 编辑
今天總算研究出Marshal的脫離順序讀取方法了...
其實Marshal 根本不一定要照著第一層、第二層、第三層的順序讀取,
不過今天要教各位的方法有點麻煩,
因為這並不是直接找出第n層的位置,
而是在檔案儲存的時候,將pos記錄下來,再從pos(文件指針)下手。
首先這個腳本是測試專用的,
這段代碼代表將字串壓縮、並分別以Marshal的方式存入001.rxdata 這個檔案,
並在儲存前、儲存後各彈出寫著當前文件指針的窗口。
@f = File.open("001.rxdata","wb")
print @f.pos
Marshal.dump(Zlib::Deflate.deflate("測試字串一號"),@f)
print @f.pos
Marshal.dump(Zlib::Deflate.deflate("測試字串二號"),@f)
print @f.pos
Marshal.dump(Zlib::Deflate.deflate("測試字串三號"),@f)
print @f.pos
@f.close
复制代码
以上腳本測試過後,
彈出結果順序如下:
0,33,66,99
接著我們便取得了三個壓縮過後的字串的位置:
0~33 這段為壓縮過後的"測試字串一號"
33~66 這段為壓縮過後的"測試字串二號"
66~99 這段為壓縮過後的"測試字串三號"
所以我們可以知道結構大約如圖:
R001.JPG
(5.72 KB, 下载次数: 37)
下载附件
保存到相册
2011-2-18 18:22 上传
接著我們實際測試:
@f = File.open("001.rxdata","rb")
@f.pos = 66 # 將文件指針設定至測試字串三號的起始位置:66
print Zlib::Inflate.inflate(Marshal.load(@f)) # 讀取後解壓並彈出 => 測試字串三號
@f.pos = 33 # 將文件指針設定至測試字串二號的起始位置:33
print Zlib::Inflate.inflate(Marshal.load(@f)) # 讀取後解壓並彈出 => 測試字串二號
@f.pos = 0 # 將文件指針設定至測試字串一號的起始位置:0
print Zlib::Inflate.inflate(Marshal.load(@f)) # 讀取後解壓並彈出 => 測試字串一號
@f.close
复制代码
我們直接將文件指針手動設定至該資料的起始位置,
再行Marshal.load,
我們就可以發現,讀取的層數位置可以任意調整!
[line]1[/line]
另外說明一下:如果要存的層數很多,
就把它改成將@f.pos分別輸出到一個新的文本即可。
作者:
DeathKing
时间:
2011-2-18 18:45
http://rpg.blue/thread-139590-1-1.html
欢迎光临 Project1 (https://rpg.blue/)
Powered by Discuz! X3.1