设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 3162|回复: 1
打印 上一主题 下一主题

[原创发布] Marshal-指定讀取其他層資料

[复制链接]

Lv1.梦旅人

梦石
0
星屑
95
在线时间
18 小时
注册时间
2008-1-22
帖子
46
跳转到指定楼层
1
发表于 2011-2-18 18:27:55 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有帐号?注册会员

x
本帖最后由 土撥撥 于 2011-2-18 18:39 编辑

今天總算研究出Marshal的脫離順序讀取方法了...

其實Marshal 根本不一定要照著第一層、第二層、第三層的順序讀取,

不過今天要教各位的方法有點麻煩,

因為這並不是直接找出第n層的位置,

而是在檔案儲存的時候,將pos記錄下來,再從pos(文件指針)下手。

首先這個腳本是測試專用的,

這段代碼代表將字串壓縮、並分別以Marshal的方式存入001.rxdata 這個檔案,

並在儲存前、儲存後各彈出寫著當前文件指針的窗口。
  1. @f = File.open("001.rxdata","wb")
  2. print @f.pos
  3. Marshal.dump(Zlib::Deflate.deflate("測試字串一號"),@f)
  4. print @f.pos
  5. Marshal.dump(Zlib::Deflate.deflate("測試字串二號"),@f)
  6. print @f.pos
  7. Marshal.dump(Zlib::Deflate.deflate("測試字串三號"),@f)
  8. print @f.pos
  9. @f.close
复制代码
以上腳本測試過後,

彈出結果順序如下:

0,33,66,99

接著我們便取得了三個壓縮過後的字串的位置:

0~33 這段為壓縮過後的"測試字串一號"
33~66 這段為壓縮過後的"測試字串二號"
66~99 這段為壓縮過後的"測試字串三號"

所以我們可以知道結構大約如圖:


接著我們實際測試:
  1. @f = File.open("001.rxdata","rb")
  2. @f.pos = 66 # 將文件指針設定至測試字串三號的起始位置:66
  3. print Zlib::Inflate.inflate(Marshal.load(@f)) # 讀取後解壓並彈出 => 測試字串三號
  4. @f.pos = 33 # 將文件指針設定至測試字串二號的起始位置:33
  5. print Zlib::Inflate.inflate(Marshal.load(@f)) # 讀取後解壓並彈出 => 測試字串二號
  6. @f.pos = 0 # 將文件指針設定至測試字串一號的起始位置:0
  7. print Zlib::Inflate.inflate(Marshal.load(@f)) # 讀取後解壓並彈出 => 測試字串一號
  8. @f.close
复制代码
我們直接將文件指針手動設定至該資料的起始位置,

再行Marshal.load,

我們就可以發現,讀取的層數位置可以任意調整!




另外說明一下:如果要存的層數很多,

就把它改成將@f.pos分別輸出到一個新的文本即可。
RGSS研究專員

Lv3.寻梦者

梦石
0
星屑
1185
在线时间
1564 小时
注册时间
2008-7-30
帖子
4418

贵宾

2
发表于 2011-2-18 18:45:25 | 只看该作者

点评

我只是发一个连接  发表于 2011-2-18 19:16
那篇太高深...看不懂...  发表于 2011-2-18 18:50
不要这样打击人家= =v  发表于 2011-2-18 18:47

See FScript Here:https://github.com/DeathKing/fscript
潜心编写URG3中。
所有对URG3的疑问和勘误或者建议,请移步至发布页面。
欢迎萌妹纸催更
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-11-21 19:51

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表