Project1

标题: 请问一下怎么把string类型的marshal直接读取 [打印本页]

作者: ISfishes    时间: 2019-1-30 00:36
标题: 请问一下怎么把string类型的marshal直接读取
本帖最后由 ISfishes 于 2019-1-30 12:47 编辑

变量a为marshal形式的文件的【全部字节】
比如a=“\004\010o:\rRPG::Map………………”  (marshal形式)
我知道可以用File.write a然后Marshal.load
但是这样要先生成文件,再读取,甚至还要删除生成的文件。速度太慢了
有没有办法直接处理a【不生成文件】得到和上面一样的效果呢?
作者: 张咚咚    时间: 2019-1-30 09:01
  1. save_data('abc', "1.txt")
  2. p load_data('1.txt')
复制代码

作者: ISfishes    时间: 2019-1-30 12:46
本帖最后由 ISfishes 于 2019-1-30 12:47 编辑

可能1f没说清楚,修改了一下
作者: ISfishes    时间: 2019-2-3 20:11
有没有办法嘛……
作者: guoxiaomi    时间: 2019-2-3 20:15
本帖最后由 guoxiaomi 于 2019-2-3 20:20 编辑

在 XP 里执行 Marshal.methods - Object.methods,显示:
  1. ["load","dump","restore"]
复制代码

第三个函数干啥用的,你已经知道了吧……
作者: RyanBern    时间: 2019-2-3 23:02
本帖最后由 RyanBern 于 2019-2-3 23:05 编辑

按文档中所说,Marshal.dump 本身就是支持直接写入到字符串的,因此 Marshal.load 自然也支持直接从字符串读取。所以你什么额外操作都不用做,只需要对这个字符串进行 Marshal.load 即可。
RUBY 代码复制
  1. s = Marshal.dump($game_temp)
  2. s1 = Marshal.load(s)
  3. p s1 # => 恰好是 $game_temp 的内容

在这里补充 Marshal.dump 的用法
RUBY 代码复制
  1. Marshal.dump(obj [, port][, limit])

表示将对象 obj 写入端口 port 中,递归写入的最大层数是 limit。这里的 port 可以是个 IO 实例,也可留空表示输出到字符串。当省略这个参数时,Marshal.dump 的返回值就是一个字符串。
作者: ISfishes    时间: 2019-2-8 09:39
666666,感谢2位版主大大




欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1