創作內容

2 GP

【RGSS/Ruby】Marshal格式、結構說明

作者:解凍豬腳│RPG 製作大師│2011-03-14 19:52:45│巴幣:4│人氣:1092
各位抱歉

我好像太久沒來這裡發了

首先,

我要對Marshal有興趣的初學者說明一下Marshal是要做什麼的,



Marshal,基本上是把"資料"轉換成能用Marshal讀取的"字串"的一個方法,

你也可以把Marshal理解成一個"格式",

這個東西在RPG的預設系統是很重要的,

因為它能夠主導存、讀檔,

而"轉換成Marshal格式"的腳本,最常用的有兩種:

第一種就是轉換、並且丟入你要儲存的位置(動作),

Marshal.dump(資料,放入位置)

我們可以這樣子寫:

@a = 65535
@f = File.open("Data.dat","wb")
Marshal.dump(@a,@f)

這時候便是把數字65535轉換成Marshal格式的字串,
並把轉換過的字串丟進檔案Data.dat裡面。

當然,Marshal.dump(資料,放入位置)這一句不只這個用法

我們也可以這樣子寫:

@i = 65535
@arr = []
Marshal.dump(@i,@arr)

這樣子就是把東西丟到數組@arr裡面。

而第二個用法就是

Marshal.dump(資料)

這東西就只是純粹轉換而已(值),

最後會返回轉換過的資料。(註:「返回」一詞在此篇第三段:函式 介紹過)

當然有儲存,

也會有讀取。

Marshal.load(port)

port可以有兩種類型:

一、轉換過的資料(這應該不用說了吧)

二、一個地方(例如檔案)



前面就是Marshal的簡單介紹了

接下來就要介紹一下大致上的結構了,

過去我們常常以"層"來解讀它的結構,

但我在看了這篇之後,發現我錯了。(那篇看了超多次...太高深了差點看不懂)

實際上差不多是這樣子(此圖沒有紅色的地方,紅色的下次才會教):



上面的「1'」代表資料1的資料訊息;

2'」代表資料2的資料訊息;

3'」代表資料3的資料訊息。

資料訊息裡面包含了:

資料長度、資料類型……等等的

不然系統其實根本沒有對資料進行分段,

所以要靠資料訊息才能知道從哪裡到哪裡是該讀取的。

我們實際測試一下,

@a = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
@f = File.open("A.txt","wb")
Marshal.dump(@a,@f)

得出來的結果(這裡我用記事本來做示意):



看到了嗎?

其實前面的 ??"? 就相當於 1'

而ABCDFGHIJKLMNOPQRSTUVWXYZ

就是資料1

所以其實Marshal的格式,

用"層"的觀念來理解,我認為是錯誤的,

其實我們可以把「資料n」跟「(n+1)'」

之間穿插一些非Marshal格式的資料,

讓想破解的人摸不著頭緒,

下次應該會教如何穿插這些無用資訊、以及讀取時跳過這些無用資訊,

看不懂的話,

可以在下面發問,

謝謝收看。

引用網址:https://home.gamer.com.tw/TrackBack.php?sn=1256685
Some rights reserved. 姓名標示-非商業性 2.5 台灣

相關創作

同標籤作品搜尋:RPG|RM|RPG 製作大師|RGSS|劇本|腳本|教學|資料|加密|結構

留言共 3 篇留言

狂狂
最近才看到你這篇 這是Ruby 內鍵serialize(序列化) 和 unserialize(反序列化)
糾正一點觀念不過他並不是轉成"字串"喔 他是將Object轉為byte型式的資料串流
這東西常用來處理網路連線的資料傳送 像圖片傳送 物件資料傳送
事實上這東西可以用來開發連線RM遊戲[e24]

08-04 05:19

狂狂
不過要搭配Windows Socket [e23]

08-04 05:20

解凍豬腳
噢~我懂了
不過看到你勇造用王北頭還真不習慣[e5]08-04 11:57
oVo巴爾坦星人
實用

06-06 09:18

我要留言提醒:您尚未登入,請先登入再留言

2喜歡★johnny860726 可決定是否刪除您的留言,請勿發表違反站規文字。

前一篇:【RGSS/Ruby】簡... 後一篇:【RGSS/Ruby】判...

追蹤私訊切換新版閱覽

作品資料夾

------------------ (0)

豬腳生活 (1)
日常雜談、巴哈大小事 (193)
煞氣a國中生 (7)
高中生活日誌 (55)
大學生活日誌 (34)
冬令營回憶錄 (19)
也許藏有一些小祕密吧? (3)
各式各樣的開箱文 (11)
貓科動物時間 (15)

------------------ (0)

繪圖創作 (1)
電繪插圖、草稿 (199)
短篇漫畫、單幅標語 (61)
上課太無聊的手繪塗鴉 (8)
不知道該怎麼分類的綜合作品 (18)

文字創作 (1)
草莓兵的國軍紀實 (14)
我與らい的點點滴滴 (12)
那些榮耀的時刻與心跳加速的瞬間 (60)
有感而發的隨筆之作、無法分類的短文 (17)

------------------ (0)

語言學習 (1)
日語:天気がいいから (5)
粵語:唔好再淨係識講粗口喇 (6)
英語:Hey, you! (1)

程式設計及電腦網路 (1)
系列文:跟著豬腳 C 起來 (10)
系列文:論壇網站運作原理 (3)
Go(Golang) (11)
Ruby / RGSS (7)
Visual Basic (13)
JavaScript (1)
各種原理 (17)

思想:多思考一下,世界會更不一樣 (1)
網路經驗、社會觀察 (23)
檸檬庫 (21)

數學:我來拯救你的期中考了 (1)
各類基礎觀念 (5)
國中生也能懂的微積分 (9)
微分方程 (0)

小說:用筆鋒劃出新世界的入口 (1)

繪圖:我也想畫出私巴拉西的美圖 (10)

------------------ (0)

施工中 (22)

不堪回首的痕跡、雜物堆放 (31)

------------------ (0)

未分類 (1)

kktwtwyufoo所有的母親們
祝母親節快樂,歡迎來到我的小屋走走逛逛看看喔,謝謝。看更多我要大聲說昨天21:18


face基於日前微軟官方表示 Internet Explorer 不再支援新的網路標準,可能無法使用新的應用程式來呈現網站內容,在瀏覽器支援度及網站安全性的雙重考量下,為了讓巴友們有更好的使用體驗,巴哈姆特即將於 2019年9月2日 停止支援 Internet Explorer 瀏覽器的頁面呈現和功能。
屆時建議您使用下述瀏覽器來瀏覽巴哈姆特:
。Google Chrome(推薦)
。Mozilla Firefox
。Microsoft Edge(Windows10以上的作業系統版本才可使用)

face我們了解您不想看到廣告的心情⋯ 若您願意支持巴哈姆特永續經營,請將 gamer.com.tw 加入廣告阻擋工具的白名單中,謝謝 !【教學】