0
我正在創建一個入口/出口系統,它可以在xml樹中編碼一個服裝數據結構,然後將其讀回並重新創建對象。 我得到的XML部分工作正常,但當我發現XML文件是1.5MB時,原始的紅寶石::元帥文件只有105kb我決定,這將是一個好主意,壓縮文件。 所以我做了這個Ruby zlib :: Gzip不能正常工作
require "rexml/document"
require "zlib"
include REXML
tilesetfile = File.new("tilesets.rmpy", "w+")
buffer = ""
tilesetgz = Zlib::GzipWriter.new(tilesetfile)
puts "Compressing output for: tilesets.rxdata ..."
tilesetdoc.write(buffer, 0)
tilesetgz.write(buffer)
tilesetgz.close
然後我試圖讓字符串緩衝區回來,這樣我可以再次短語爲XML像這樣
require "rexml/document"
require "zlib"
include REXML
tilesetfile = File.open("tilesets.rmpy", "r")
tilesetgz = Zlib::GzipReader.new(tilesetfile)
testfile = File.new("importtest.txt", "w")
tilesetdoc = Document.new tilesetgz
應該注意的是,無論這些spinets的包含整個系統,只是需要報頭和最後幾行做壓縮
但我得到一個措辭錯誤,因爲XML文檔蜜蜂破壞了一些如何
這是出把進口斯克呂普之前,我Gziped它(tracated當然該文件1.5MB畢竟)
<tilesetdata>
<tileset>
<id>
1
</id>
<022-Roof01/>
<tileset_name>
019-DesertTown01
</tileset_name>
<autotile_names>
<item>
015-Sa_Water01
</item>
<item>
016-Sa_Shadow01
</item>
<item>
018-Sa_Ground01
</item>
<item>
019-Sa_Grass02
</item>
<item>
020-Sa_Grass03
</item>
<item>
021-Sa_Road01
</item>
<item>
022-Roof01
</item>
</autotile_names>
<panorama_name>
</panorama_name>
<panorama_hue>
0
</panorama_hue>
<fog_name>
</fog_name>
<fog_hue>
0
</fog_hue>
<fog_opacity>
64
</fog_opacity>
<fog_blend_type>
0
</fog_blend_type>
<fog_zoom>
200
</fog_zoom>
<fog_sx>
0
</fog_sx>
<fog_sy>
0
</fog_sy>
<battleback_name>
</battleback_name>
<passages>
<item>
15
</item>
<item>
15
</item>
<item>
15
</item>
<item>
15
</item>
<item>
15
</item>
<item>
15
</item>
在進口方面我攔截了unGziped文件奇怪的是該文件是1.3 MB這時候
<tilesetdata>
<tileset>
<id>
1
</id>
<022-Roof01/>
<tileset_name>
019-DesertTown01
</tileset_name>
<autotile_names>
<item>
015-Sa_Water01
</item>
<item>
016-Sa_Shadow01
</item>
<item>
018-Sa_Ground01
</item>
<item>
019-Sa_Grass02
</item>
<item>
020-Sa_Grass03
</item>
<item>
021-Sa_Road01
</item>
<item>
022-Roof01
</item>
</autotile_names>
<panorama_name>
</panorama_name>
<panorama_hue>
0
</panorama_hue>
<fog_name>
</fog_name>
<fog_hue>
0
</fog_hue>
<fog_opacity>
64
</fog_opacity>
<fog_blend_type>
0
</fog_blend_type>
<fog_zoom>
200
</fog_zoom>
<fog_sx>
0
</fog_sx>
<fog_syy>
0
</fog_sx>
<fog_syy>
0
</fog_sx>
<fog_syy>
0
</fog_sx>
<fog_syy>
0
</fog_sx>
<fog_syy>
0
</fog_sx>
原來的腐敗只得到從這裏
更糟澄清我跑導入腳本,它產生的(在18KB) 文件tilesets.rmpy和我跑了進口測試系統並發現了這一點。
任何想法什麼時候錯了?或者如果不是如何解決它,一個替代?
也許在「RB」打開的文件用gzip ,「wb」模式,而不是「r」,「w」? – Nakilon 2010-09-11 06:20:46
嗯,這似乎是工作,沒有更多的腐敗。當我找出我似乎遇到的其他問題時,我會發布更多信息 – Ryex 2010-09-11 07:14:26