亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? 053.htm

?? delphi編程
?? HTM
?? 第 1 頁 / 共 4 頁
字號:
<p> </font><font face="Arial"></p>
<p>20.2.2.2 TWriter</font><font face="宋體" lang="ZH-CN">對象的實現</p>
<p> </p>
<p>  </font><font face="Arial">TWriter</font><font face="宋體" lang="ZH-CN">對象提供了許多往流中寫各種類型數據的方法,這對于程序員來說是很重要的功能。</font><font
face="Arial">TWrite</font><font face="宋體" lang="ZH-CN">對象往流中寫數據是依據不同的數據采取不同的格式的。</font>
<font face="宋體" lang="ZH-CN">因此要掌握</font><font face="Arial">TWriter</font><font
face="宋體" lang="ZH-CN">對象的實現和應用方法,必須了解</font><font
face="Arial">Writer</font><font face="宋體" lang="ZH-CN">對象存儲數據的格式。</p>
<p>  首先要說明的是,每個</font><font face="Arial">Filer</font><font
face="宋體" lang="ZH-CN">對象的流中都包含有</font><font face="Arial">Filer</font><font
face="宋體" lang="ZH-CN">對象標簽。該標簽占四個字節其值為“</font><font
face="Arial">TPF0</font><font face="宋體" lang="ZH-CN">”。</font><font face="Arial">Filer</font><font
face="宋體" lang="ZH-CN">對象為</font><font face="Arial">WriteSignature</font><font
face="宋體" lang="ZH-CN">和</font><font face="Arial">ReadSignature</font><font
face="宋體" lang="ZH-CN">方法存取該標簽。該標簽主要用于</font><font
face="Arial">Reader</font><font face="宋體" lang="ZH-CN">對象讀數據</font><font
face="Arial">(</font><font face="宋體" lang="ZH-CN">部件等</font><font face="Arial">)</font><font
face="宋體" lang="ZH-CN">時,指導讀操作。</p>
<p>  其次,</font><font face="Arial">Writer</font><font face="宋體" lang="ZH-CN">對象在存儲數據前都要留一個字節的標志位,以指出后面存放的是什么類型的數據。該字節為</font><font
face="Arial">TValueType</font><font face="宋體" lang="ZH-CN">類型的值。</font><font
face="Arial">TValueType</font><font face="宋體" lang="ZH-CN">是枚舉類型,占一個字節空間,其定義如下:</p>
<p> </p>
<p>  </font><font face="Arial">TValueType = (VaNull, VaList, VaInt8, VaInt16, VaInt32,
VaEntended, VaString, VaIdent, </p>
<p>VaFalse, VaTrue, VaBinary, VaSet, VaLString, VaNil, VaCollection); </p>
<p></font> <font face="Arial"></p>
<p></font><font face="宋體" lang="ZH-CN">因此,對</font><font face="Arial">Writer</font><font
face="宋體" lang="ZH-CN">對象的每一個寫數據方法,在實現上,都要先寫標志位再寫相應的數據</font><font
face="Arial">;</font><font face="宋體" lang="ZH-CN">而</font><font face="Arial">Reader</font><font
face="宋體" lang="ZH-CN">對象的每一個讀數據方法都要先讀標志位進行判斷,如果符合就讀數據,否則產生一個讀數據無效的異常事件。</font><font
face="Arial">VaList</font><font face="宋體" lang="ZH-CN">標志有著特殊的用途,它是用來標識后面將有一連串類型相同的項目,而標識連續項目結束的標志是</font><font
face="Arial">VaNull</font><font face="宋體" lang="ZH-CN">。因此,在</font><font
face="Arial">Writer</font><font face="宋體" lang="ZH-CN">對象寫連續若干個相同項目時,先用</font><font
face="Arial">WriteListBegin</font><font face="宋體" lang="ZH-CN">寫入</font><font
face="Arial">VaList</font><font face="宋體" lang="ZH-CN">標志,寫完數據項目后,再寫出</font><font
face="Arial">VaNull</font><font face="宋體" lang="ZH-CN">標志;而讀這些數據時,以</font><font
face="Arial">ReadListBegin</font><font face="宋體" lang="ZH-CN">開始,</font><font
face="Arial">ReadListEnd</font><font face="宋體" lang="ZH-CN">結束,中間用</font><font
face="Arial">EndofList</font><font face="宋體" lang="ZH-CN">函數判斷是否有</font><font
face="Arial">VaNull</font><font face="宋體" lang="ZH-CN">標志。</p>
<p>  下面就介紹它們的實現。</p>
<p>  </font><font face="Arial">1. TWriter</font><font face="宋體" lang="ZH-CN">對象屬性的實現</p>
<p>  </font><font face="Arial">TWriter</font><font face="宋體" lang="ZH-CN">對象直接從</font><font
face="Arial">TFiler</font><font face="宋體" lang="ZH-CN">對象繼承,它只增加了</font><font
face="Arial">Position</font><font face="宋體" lang="ZH-CN">和</font><font face="Arial">RootAncestor</font><font
face="宋體" lang="ZH-CN">屬性。</font><font face="Arial"></p>
<p>RootAncestor</font><font face="宋體" lang="ZH-CN">屬性在</font><font face="Arial">private</font><font
face="宋體" lang="ZH-CN">部分有數據域</font><font face="Arial">FRootAncestor</font><font
face="宋體" lang="ZH-CN">存入其值。在屬性定義的讀與控制上都是直接讀取該值。</p>
<p>  </font><font face="Arial">Position</font><font face="宋體" lang="ZH-CN">屬性的定義中包含了兩個讀寫控制方法:</font><font
face="Arial">GetPosition</font><font face="宋體" lang="ZH-CN">和</font><font
face="Arial">SetPosition</font><font face="宋體" lang="ZH-CN">:</p>
<p> </p>
<p></font><font face="Arial">TWriter = class(TFiler)</p>
<p>private</p>
<p>FRootAncestor: TComponent;</p>
<p></font><font face="宋體" lang="ZH-CN">…</p>
<p></font><font face="Arial">function GetPosition: Longint;</p>
<p>procedure SetPosition(Value: Longint);</p>
<p>public</p>
<p></font><font face="宋體" lang="ZH-CN">…</p>
<p></font><font face="Arial">property Position: Longint read GetPosition write
SetPosition;</p>
<p>property RootAncestor: TComponent read FRootAncestor write FRootAncestor;</p>
<p>end;</p>
<p></font> <font face="Arial"></p>
<p>GetPosition</font><font face="宋體" lang="ZH-CN">和</font><font face="Arial">SetPosition</font><font
face="宋體" lang="ZH-CN">方法實現如下:</p>
<p> </p>
<p></font><font face="Arial">function TWriter.GetPosition: Longint;</p>
<p>begin</p>
<p>Result := FStream.Position + FBufPos;</p>
<p>end;</font><font face="宋體" lang="ZH-CN"></p>
<p> </p>
<p></font><font face="Arial">procedure TWriter.SetPosition(Value: Longint);</p>
<p>var</p>
<p>StreamPosition: Longint;</p>
<p>begin</p>
<p>StreamPosition := FStream.Position;</p>
<p>{ </font><font face="宋體" lang="ZH-CN">只清除越界的緩沖區</font> <font
face="Arial">}</p>
<p>if (Value &lt; StreamPosition) or (Value &gt; StreamPosition + FBufPos) then</p>
<p>begin</p>
<p>WriteBuffer;</p>
<p>FStream.Position := Value;</p>
<p>end</p>
<p>else FBufPos := Value - StreamPosition;</p>
<p>end; </p>
<p></font> <font face="宋體" lang="ZH-CN"></p>
<p>  </font><font face="Arial">WriteBuffer</font><font face="宋體" lang="ZH-CN">是</font><font
face="Arial">TWriter</font><font face="宋體" lang="ZH-CN">對象定義的私有方法,它的作用是將</font><font
face="Arial">Writer </font><font face="宋體" lang="ZH-CN">對象內部緩沖區中的有效數據寫入流中,并將</font><font
face="Arial">FBufPos</font><font face="宋體" lang="ZH-CN">置為</font><font
face="Arial">0</font><font face="宋體" lang="ZH-CN">。</font><font face="Arial">Writer</font><font
face="宋體" lang="ZH-CN">對象的</font><font face="Arial">FlushBuffer</font><font
face="宋體" lang="ZH-CN">對象就是用</font><font face="Arial">WriteBuffer</font><font
face="宋體" lang="ZH-CN">方法刷新緩沖區。</p>
<p>  在</font><font face="Arial">SetPosition</font><font face="宋體" lang="ZH-CN">方法中,如果</font><font
face="Arial">Value</font><font face="宋體" lang="ZH-CN">值超出了邊界</font><font
face="Arial">(FStream.Position</font><font face="宋體" lang="ZH-CN">,</font><font
face="Arial">FStream.Position + FBufPos)</font><font face="宋體" lang="ZH-CN">,就將緩沖區中的內容寫入流,重新設置緩沖區在流中的相對位置;否則,就只是移動</font><font
face="Arial">FBufPos</font><font face="宋體" lang="ZH-CN">指針。</p>
<p>  </font><font face="Arial">2. TWriter</font><font face="宋體" lang="ZH-CN">方法的實現</p>
<p>  ⑴</font><font face="Arial"> WriteListBegin</font><font face="宋體"
lang="ZH-CN">和</font><font face="Arial">WriteListEnd</font><font face="宋體"
lang="ZH-CN">的實現</p>
<p>  這兩個方法都是用于寫連續若干個相同類型的值。</font><font
face="Arial">WriteListBegin</font><font face="宋體" lang="ZH-CN">寫入</font><font
face="Arial">VaList</font><font face="宋體" lang="ZH-CN">標志,</font><font
face="Arial">WriteListEnd</font><font face="宋體" lang="ZH-CN">寫入</font><font
face="Arial">VaNull</font><font face="宋體" lang="ZH-CN">標志。</p>
<p> </p>
<p></font><font face="Arial">procedure TWriter.WriteListBegin;</p>
<p>begin</p>
<p>WriteValue(vaList);</p>
<p>end;</p>
<p></font> <font face="Arial"></p>
<p>procedure TWriter.WriteListEnd;</p>
<p>begin</p>
<p>WriteValue(vaNull);</p>
<p>end;</p>
<p></font> <font face="宋體" lang="ZH-CN"></p>
<p>  這兩個方法都調用</font><font face="Arial">TWriter</font><font
face="宋體" lang="ZH-CN">對象的</font><font face="Arial">WriteValue</font><font
face="宋體" lang="ZH-CN">方法,該方法主要用于寫入</font><font face="Arial">TValueType</font><font
face="宋體" lang="ZH-CN">類型的值。</p>
<p> </p>
<p></font><font face="Arial">procedure TWriter.WriteValue(Value: TValueType);</p>
<p>begin</p>
<p>Write(Value, SizeOf(Value)); </p>
<p>end;</p>
<p></font> <font face="宋體" lang="ZH-CN"></p>
<p> ?、?lt;/font><font face="Arial"> </font><font face="宋體" lang="ZH-CN">簡單數據類型的寫入</p>
<p>  簡單數據類型指的是整型、字符型、字符串型、浮點型、布爾型等。</font><font
face="Arial">TWriter</font><font face="宋體" lang="ZH-CN">對象都定義了相應的寫入方法。</p>
<p>  </font><font face="Arial">WriteInteger</font><font face="宋體" lang="ZH-CN">方法用于寫入整型數據。</p>
<p> </p>
<p></font><font face="Arial">procedure TWriter.WriteInteger(Value: Longint);</p>
<p>begin</p>
<p>if (Value &gt;= -128) and (Value &lt;= 127) then</font><font face="宋體" lang="ZH-CN"></p>
<p></font><font face="Arial">begin</font><font face="宋體" lang="ZH-CN"></p>
<p></font><font face="Arial">WriteValue(vaInt8);</p>
<p>Write(Value, SizeOf(Shortint));</p>
<p>end else</p>
<p>if (Value &gt;= -32768) and (Value &lt;= 32767) then</p>
<p>begin</p>
<p>WriteValue(vaInt16);</p>
<p>Write(Value, SizeOf(Smallint));</p>
<p>end else</p>
<p>begin</p>
<p>WriteValue(vaInt32);</p>
<p>Write(Value, SizeOf(Longint));</p>
<p>end;</p>
<p>end;</p>
<p></font> <font face="宋體" lang="ZH-CN"></p>
<p>  </font><font face="Arial">WriteInteger</font><font face="宋體" lang="ZH-CN">方法將整型數據分為</font><font
face="Arial">8</font><font face="宋體" lang="ZH-CN">位、</font><font face="Arial">16</font><font
face="宋體" lang="ZH-CN">位和</font><font face="Arial">32</font><font face="宋體"
lang="ZH-CN">位三種,并分別用</font><font face="Arial">vaInt8</font><font
face="宋體" lang="ZH-CN">、</font><font face="Arial">vaInt16</font><font face="宋體"
lang="ZH-CN">和</font><font face="Arial">VaInt32</font><font face="宋體" lang="ZH-CN">。</p>
<p>  </font><font face="Arial">WriteBoolean</font><font face="宋體" lang="ZH-CN">用于寫入布爾型數據:</p>
<p> </p>
<p></font><font face="Arial">procedure TWriter.WriteBoolean(Value: Boolean);</p>
<p>begin</p>
<p>if Value then</p>

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲图片你懂的| 国产精品电影一区二区| 天堂久久久久va久久久久| 欧美色图激情小说| 奇米在线7777在线精品 | 亚洲激情成人在线| 欧美亚洲动漫精品| 秋霞成人午夜伦在线观看| 日韩三区在线观看| 成人性视频免费网站| 亚洲免费在线电影| 91精品福利在线一区二区三区 | 欧美经典一区二区三区| 99久久99久久久精品齐齐| 亚洲成人7777| 国产日韩欧美精品电影三级在线 | 偷拍一区二区三区| 欧美哺乳videos| 99精品国产热久久91蜜凸| 午夜精品福利一区二区三区av| 91精品国产高清一区二区三区蜜臀| 国内成人精品2018免费看| 1区2区3区精品视频| 欧美日韩一区久久| 国产一区二区三区综合| 亚洲精品日韩专区silk| 日韩精品中午字幕| 91免费看`日韩一区二区| 丝瓜av网站精品一区二区| 久久午夜羞羞影院免费观看| 91网站视频在线观看| 麻豆国产91在线播放| 亚洲视频 欧洲视频| 欧美不卡在线视频| 日本福利一区二区| 国产精品一区二区视频| 午夜久久久久久| 国产精品人成在线观看免费| 91麻豆精品国产91久久久久久 | 一本久久综合亚洲鲁鲁五月天| 日韩二区三区四区| 亚洲视频1区2区| 精品sm捆绑视频| 欧美日韩高清一区二区三区| 国产91精品在线观看| 免费人成黄页网站在线一区二区| 日韩毛片视频在线看| 26uuu成人网一区二区三区| 欧美日韩在线直播| 91丝袜美女网| 丁香五精品蜜臀久久久久99网站| 日韩av中文在线观看| 亚洲黄色小视频| 中文欧美字幕免费| 精品蜜桃在线看| 欧美精品亚洲二区| 91成人免费网站| av成人免费在线| 国产91丝袜在线观看| 国产黄色精品网站| 国产在线播精品第三| 久久精品二区亚洲w码| 日韩影院精彩在线| 日韩综合一区二区| 天堂久久久久va久久久久| 亚洲午夜免费视频| 一区二区三区久久| 亚洲在线中文字幕| 亚洲一区在线看| 亚洲国产精品一区二区www在线| 亚洲男女一区二区三区| 亚洲欧洲制服丝袜| 亚洲人成网站在线| 夜夜操天天操亚洲| 亚洲一区在线看| 午夜欧美2019年伦理| 亚瑟在线精品视频| 日韩高清中文字幕一区| 免费成人美女在线观看| 麻豆极品一区二区三区| 久久99精品久久久久久动态图 | 国产精品美女久久福利网站| 中文在线免费一区三区高中清不卡| 国产欧美一区二区精品性| 国产欧美日韩视频一区二区| 欧美国产日本韩| 亚洲欧美区自拍先锋| 亚洲国产精品影院| 麻豆91在线观看| 国产成人av影院| 色综合网站在线| 欧美丝袜丝交足nylons图片| 欧美日韩第一区日日骚| 精品av综合导航| 国产精品久久久久久久久晋中| 国产精品免费久久久久| 亚洲国产精品久久一线不卡| 日韩电影免费在线观看网站| 国产毛片精品国产一区二区三区| 国产suv精品一区二区三区| 99久久精品国产导航| 欧美视频在线播放| 欧美tickling挠脚心丨vk| 国产精品沙发午睡系列990531| 亚洲男人电影天堂| 美国十次了思思久久精品导航| 国产风韵犹存在线视精品| 一本一道久久a久久精品| 欧美精品18+| 亚洲国产精品二十页| 亚洲第四色夜色| 国产精品伊人色| 欧美性xxxxx极品少妇| 久久久另类综合| 亚洲一区二区三区四区的| 狠狠色丁香婷婷综合| 日本黄色一区二区| 欧美精品一区二区三区视频| 亚洲狠狠丁香婷婷综合久久久| 久久国产成人午夜av影院| 91最新地址在线播放| 日韩免费高清av| 亚洲美女一区二区三区| 国产米奇在线777精品观看| 欧美日韩一级二级三级| 国产精品久久毛片a| 久久不见久久见免费视频7| 色爱区综合激月婷婷| 国产婷婷一区二区| 美女免费视频一区二区| 色婷婷综合视频在线观看| 久久久www免费人成精品| 午夜精品免费在线观看| eeuss国产一区二区三区| 欧美哺乳videos| 日韩和的一区二区| 色综合婷婷久久| 日本一区二区成人| 国产一区二区精品久久99| 欧美日韩国产综合一区二区 | 国产农村妇女精品| 免费黄网站欧美| 欧美偷拍一区二区| 亚洲精品久久嫩草网站秘色| 国产盗摄一区二区三区| 精品国产一区二区三区久久久蜜月 | 国产日产欧产精品推荐色 | 在线成人小视频| 亚洲综合一二三区| av在线不卡网| 国产农村妇女毛片精品久久麻豆| 激情小说亚洲一区| 日韩美女一区二区三区四区| 日韩av一级片| 91精品久久久久久久99蜜桃 | 精品亚洲成a人在线观看| 欧美日韩国产美女| 亚洲一区二区三区四区的| 欧洲一区在线电影| 亚洲国产裸拍裸体视频在线观看乱了| 91美女片黄在线观看| 一区在线中文字幕| 91网站最新地址| 亚洲欧美区自拍先锋| 色综合久久综合网97色综合| 亚洲欧洲日本在线| 日本伦理一区二区| 亚洲6080在线| 日韩欧美精品三级| 国产一区在线观看麻豆| 国产午夜精品一区二区三区视频 | 狠狠色丁香九九婷婷综合五月| 日韩欧美一区在线| 国内欧美视频一区二区| 久久精品夜色噜噜亚洲a∨| 国产一区二区三区黄视频| 国产色婷婷亚洲99精品小说| 国产99久久久国产精品潘金| 中文字幕在线不卡一区二区三区| 91在线国产福利| 亚洲一区二区五区| 日韩网站在线看片你懂的| 蜜臀av一区二区| 国产欧美精品日韩区二区麻豆天美| 成人在线视频一区二区| 亚洲欧美一区二区三区国产精品 | 成人avav影音| 亚洲丝袜美腿综合| 欧美综合一区二区三区| 午夜免费欧美电影| 精品国产乱码久久久久久浪潮| 国产成人av电影在线观看| 亚洲另类在线视频| 欧美福利电影网| 国产成人欧美日韩在线电影| 亚洲天堂网中文字| 91精品午夜视频| 成人免费看的视频| 亚洲国产精品影院| 久久久一区二区三区捆绑**|