internal void DirectoryWrite(string str, WzArchiveItemType type, WzArchiveItemType cachetype) { bool cacheable = false; bool hascache = this.mRefTable.ContainsKey(str); long org = this.mStream.Tell(true); if (hascache) { this.mStream.Seek(this.mRefTable[str], true); cacheable = this.mStream.Read1u() == (byte)type; this.mStream.Seek(org, true); } this.mStream.Write1u((byte)(cacheable ? cachetype : type)); if (cacheable) { this.mStream.Write4u(this.mRefTable[str]); } else { this.mRefTable.Add(str, (uint)org); SerializeString.Write(this.mStream, str); } }
/// <summary> 寫入一串序列化文字。如果池裡已經存在相同的字串,則會以快取的形式寫入 </summary> /// <param name="str"> </param> /// <param name="readsign"> 表示需要從資料流讀取的標記 </param> /// <param name="refsign"> 表示需要從池裡讀取的標記 </param> public void Write(string str, byte readsign, byte refsign) { if (str == null) { str = ""; } bool cacheable = this.mRefTable.ContainsKey(str); this.mStream.Write1u(cacheable ? refsign : readsign); if (cacheable) { this.mStream.Write4u(this.mRefTable[str]); } else { this.mRefTable.Add(str, (uint)(this.mStream.Tell(true))); SerializeString.Write(this.mStream, str); } }