青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

kenlistian

厚積薄發(fā). 勤為槳,思為帆

   :: 首頁 :: 新隨筆 ::  :: 聚合  :: 管理 ::
  73 隨筆 :: 4 文章 :: 22 評(píng)論 :: 0 Trackbacks

轉(zhuǎn)自網(wǎng)絡(luò),流的概念主要在cbuilder  和delphi編程環(huán)境下的處理,使用流有以下方面

  • 1. 使用統(tǒng)一的流的概念來操作各種不同類型的資源。
    2. 通過流將資源保存到不同的介質(zhì)上,如將組件保存到文件中,將ICON資源調(diào)入內(nèi)存等。 3. 簡化一些對(duì)象的操作,如TBlobStream和TClientBlobStream
    4. 實(shí)現(xiàn)一些原來不好實(shí)現(xiàn)的功能,如TWinSocketStream實(shí)現(xiàn)超時(shí)操作

 

 

1.概述cbuilder流
在CBUILDER中,存在以下幾種流對(duì)象:
TFileStream
TMemoryStream
TStringStream
TWinSocketStream
TBlobStream
TOleStream
TClientBlobStream
TResourceStream


下面是以上各類的繼承關(guān)系
TObject
  |
TStream
  |
+---------------------------+---------------------------+--------------------+-------------------+------------+
|                  |                  |              |            |        |
THandleStream TCustomMemoryStream TWinsocketStream TBlobStream TOleStream  TStringStream
|                  |
TFileStream  TMemoryStream
                    |
            +-----------------------------+
            |                            |
        TClientBlobStream          TResourceStream

 


2 流對(duì)象的屬性及方法簡介
關(guān)于各屬性和方法的詳細(xì)語法請(qǐng)見CBUILDER的幫助

一. TStream介紹
屬性
        Position:當(dāng)前位置指針
        Size:流的大小,單位為字節(jié)
方法
        CopyFrom:   從一個(gè)流往另一個(gè)流拷貝數(shù)據(jù)
        Read:       從流中讀取一定字節(jié)的數(shù)據(jù)到緩沖區(qū),返回讀取的字節(jié)數(shù)
        ReadBuffer: 從流中讀取一定字節(jié)的數(shù)據(jù)到緩沖區(qū),如不正確則異常
        ReadComponent:從流中取出一個(gè)組件
        ReadComponentRes:以Windows的資源文件格式從流中讀取一組件
        Seek:         定位流的當(dāng)前位置指針
        SetSize:     設(shè)置流的大小。
        Write:       從緩沖區(qū)中將一定字節(jié)的數(shù)據(jù)寫入到流中,返回寫入的字節(jié)數(shù)
        WriteBuffer: 從緩沖區(qū)中將一定字節(jié)的數(shù)據(jù)寫入到流中,失敗則異常
        WriteComponent:將一組件寫入到流中
        WriteComponentRes:將一組件以Windows資源文件的格式寫入到流中


二. THandleStream介紹
屬性
        Handle:流對(duì)象要讀寫的通迅資源的句柄
        Size:句柄所標(biāo)識(shí)的資源的大小,單位為字節(jié)
方法
        Read:從流中讀數(shù)據(jù)到緩沖區(qū)中
        Seek:設(shè)置流的當(dāng)前位置
        SetSize:設(shè)置流的大小,不成功則返回一個(gè)異常
        THandleStream:通過一個(gè)打開的句柄建立一個(gè)句柄流對(duì)象
        Write:將數(shù)據(jù)從緩沖區(qū)中寫入到流

可以使用THandleStream流對(duì)象來存取如文件、套接字、命名管道、郵槽等打開了句柄的通迅資源。

采用句柄流對(duì)象進(jìn)行文件操作的片段代碼:
//////////////////////////////////////////////////////////////////////////////////////////////
//將c:config.sys文件中的內(nèi)容讀入到一個(gè)文本框中
int fileHandle;
THandleStream *fileStream;

  fileHandle = FileOpen(“c:\config.sys”,fmOpenRead);
  if(fileHandle == -1)
     return ;  //打開文件出錯(cuò)

  fileStream = new THandleStream(fileHandle);
  char buffer[10001];
  unsigned long bufferSize;
  do
  {
    bufferSize = fileStream->Read(buffer, 10000);
    if (bufferSize > 0 )
    {
        buffer[bufferSize] = 0;
        Memo1->Text += buffer;
    }
  }while( bufferSize == 10000 );

  delete fileStream;
  FileClose(fileHandle); //請(qǐng)注意一定要先注銷流對(duì)象才能關(guān)閉句柄

 

三. TCustomMemoryStream介紹
屬性
        Memory:指向內(nèi)存流對(duì)象的實(shí)際內(nèi)存的指針,可用該指針直接訪問內(nèi)存流的內(nèi)存
方法
        Read:從流中讀數(shù)據(jù)到緩沖區(qū)中
        SaveToFile:將內(nèi)存流中的數(shù)據(jù)保存到文件中
        SaveToStream:將內(nèi)存流中的數(shù)據(jù)保存到其它流對(duì)象中
        Seek:設(shè)置流對(duì)象的當(dāng)前位置
        SetPointer:設(shè)置與內(nèi)存流對(duì)象相關(guān)聯(lián)的內(nèi)存池

    該類為純虛類,不能直接建立其對(duì)象。
    應(yīng)使用TMemoryStream或是TResourceStream。

四. TWinSocketStream介紹
屬性
        TimeOut:設(shè)置在讀或?qū)慡ocket時(shí)的超時(shí)值,單位:毫秒
方法
        Read:從Socket中讀取指定字節(jié)的數(shù)據(jù)到緩沖區(qū)中,返回實(shí)際讀取的字節(jié)數(shù)
        Seek:沒有意義
        TWinSocketStream:根據(jù)指定的Socket句柄和超時(shí)時(shí)間建立一個(gè)Socket流對(duì)象
        WaitForData:確認(rèn)是否可以通過Socket連接來發(fā)送或接收數(shù)據(jù)了。
        Write:通過Socket連接發(fā)送緩沖區(qū)中指定字節(jié)的數(shù)據(jù)

TWinSocketStream流對(duì)象用來在阻塞方式的Socket連接中發(fā)送和接收數(shù)據(jù),
從而避免一般情況下的掛起現(xiàn)象。

下列是一個(gè)用TWinSocketStream進(jìn)行收發(fā)數(shù)據(jù)的代碼片段:
/////////////////////////////////////////////////////////////////////////////////////////////////////
//在一單獨(dú)的線程中通過阻塞式Socket連接發(fā)送數(shù)據(jù)
void __fastcall TMyClientThread::Execute()
{
   TWinSocketStream *pStream = new TWinSocketStream(ClientSocket1->Socket, 60000);
   try
   {
     while (!Terminated && ClientSocket1->Active)
     {
        try
        {
           char buffer[10];
           GetNextRequest(buffer); // GetNextRequest must be a thread-safe method

          // write the request to the server
           pStream->Write(buffer, strlen(buffer) + 1);
          // continue the communication (eg read a response from the server)
           ...
         }
        catch (Exception &E)
        {
          if (!E.ClassNameIs("EAbort"))
          //you must write HandleThreadException
          Synchronize(HandleThreadException());
         }
     }
    }
    __finally
    {
       delete pStream;
    }
}


五. TBlobStream介紹
方法
        Read:讀取數(shù)據(jù)到緩沖區(qū)中
        Seek:定位流的當(dāng)前位置
        TBlobStream:根據(jù)一個(gè)TBlobField字段建立一個(gè)流對(duì)象
        Truncate:從當(dāng)前位置截短流對(duì)象
        Write:將緩沖區(qū)中的數(shù)據(jù)寫入到流對(duì)象中
 
 TBlobStream流對(duì)象只用于對(duì)TblobField進(jìn)行操作,
 注意,當(dāng)改變了數(shù)據(jù)集對(duì)象的當(dāng)前記錄時(shí),
 要重新建立TBlobStream對(duì)象并在使用完后將之刪除。
//////////////////////////////////////////////////////////////////////////////////////////////////////////////
//讀取Blob字段的數(shù)據(jù)
void __fastcall TForm1::Button1Click(TObject *Sender)
{
  int MemSize;
  char *Buffer;
  TBlobStream *Stream;
  if (!Query1->Eof)
     Query1->Next();
  
   Stream = new TBlobStream((TBlobField *)Query1->FieldByName("Notes"), bmRead);
    try
     {
        MemSize = Stream->Size + 1; // add one for null terminator
        Buffer = new char[MemSize]; // Allocate the memory.
        try
        {
           Stream->Read(Buffer, MemSize); //Read Notes field into buffer.
           Memo1->SetTextBuf(Buffer);  // Display the buffer's contents.
         }
         catch (...)
        {
           delete Buffer;
           throw;
        }
       delete Buffer;
      }
      catch (...)
      {
         delete Stream;
          throw;
      }
      delete Stream;
}

六. TOleStream介紹
方法
        TOLEStream:通過一個(gè)流界面建立Ole流對(duì)象
        Read:從流對(duì)象中讀數(shù)據(jù)到緩沖區(qū)中
        Seek:定位流的當(dāng)前位置
        Write:從緩沖區(qū)中將數(shù)據(jù)寫入到流對(duì)象中

七. TStringStream介紹
屬性
        DataString:流對(duì)象的實(shí)際存儲(chǔ)字符串
        Size:流對(duì)象大小
方法
        Read:從流對(duì)象中讀數(shù)據(jù)到緩沖區(qū)中
        ReadString:以字符串形式返回流中指定數(shù)據(jù)
        Seek:定位流的當(dāng)前位置
        TStringStream:根據(jù)一個(gè)字符串建立字符串流對(duì)象
        Write:從緩沖區(qū)中將數(shù)據(jù)寫入到流對(duì)象中
        WriteString:將字符串中數(shù)據(jù)寫入到流中

八. TFileStream介紹
方法
        TFileStream:根據(jù)文件名建立或打開一個(gè)文件,并建立相應(yīng)的文件流對(duì)象
例:TFileStream *fsBootINI = new TFileStream(“c:\boot.ini”,fmOpenRead);


九. TMemoryStream介紹
方法
        Clear:清除流對(duì)象中所有數(shù)據(jù)
        LoadFromFile:從文件中讀入數(shù)據(jù)到流對(duì)象中
        LoadFromStream:從其它流中讀入數(shù)據(jù)
        SetSize:設(shè)置流對(duì)象的大小
        Write:從緩沖區(qū)中寫數(shù)據(jù)到內(nèi)存流中

十. TClientBlobStream介紹
方法
        TClientBlobStream:根據(jù)TblobField對(duì)象建立一個(gè)流對(duì)象
        Truncate:截短流
        Write:將緩沖區(qū)中數(shù)據(jù)寫入到流中
該流對(duì)象用來操作TClientDataSet數(shù)據(jù)集中的BLOB類型的字段

十一. TResourceStream介紹
方法
TResourceStream:根據(jù)EXE文件名柄或DLL文件句柄和資源描述生成流對(duì)象
        Write:不支持寫操作,產(chǎn)生異常

十二. 與流對(duì)象相關(guān)的對(duì)象介紹
TFilter
+--------------------------+
|                 |
TReader        TWriter
以上對(duì)象用于將組件寫入到流對(duì)象中或是從流對(duì)象生成組件
流對(duì)象中的方法ReadComponent 和WriteComponent在實(shí)現(xiàn)時(shí)就是使用TReader和TWriter來實(shí)際操作的。

十三. 與流對(duì)象相關(guān)的函數(shù)

extern PACKAGE void __fastcall ObjectTextToBinary(TStream* Input, TStream* Output);
extern PACKAGE void __fastcall ObjectBinaryToText(TStream* Input, TStream* Output);
extern PACKAGE void __fastcall ObjectTextToResource(TStream* Input, TStream* Output);
extern PACKAGE void __fastcall ObjectResourceToText(TStream* Input, TStream* Output);

以上函數(shù)都是針對(duì)存儲(chǔ)對(duì)象的流而言的,在流之間轉(zhuǎn)換流中所存儲(chǔ)對(duì)象的描述方式。

 

 


 

posted on 2006-08-19 13:45 kenlistian 閱讀(1030) 評(píng)論(0)  編輯 收藏 引用

只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。
網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            制服丝袜激情欧洲亚洲| 久久久久**毛片大全| 亚洲视频在线观看免费| 亚洲精品网址在线观看| 亚洲成色999久久网站| 国产三级欧美三级日产三级99| 国产精品xnxxcom| 国产精品高潮呻吟视频| 国产精品日韩一区二区三区| 国产精品视频观看| 国产深夜精品福利| 亚洲国产专区| 亚洲视频每日更新| 久久精品1区| 久久字幕精品一区| 亚洲国产美女精品久久久久∴| 免费成人美女女| 亚洲成色999久久网站| 夜夜嗨av一区二区三区网站四季av| 亚洲天堂成人在线观看| 久久九九全国免费精品观看| 欧美不卡福利| 国产精品女人久久久久久| 国产又爽又黄的激情精品视频| 亚洲国产精品一区| 亚洲欧美视频| 欧美国产精品久久| 亚洲一区二区日本| 久久久人成影片一区二区三区观看| 欧美bbbxxxxx| 国产午夜精品一区理论片飘花| 亚洲韩国日本中文字幕| 欧美一级电影久久| 亚洲国产婷婷香蕉久久久久久99| 亚洲一区在线免费| 欧美成人性生活| 精品成人久久| 欧美在线一级va免费观看| 亚洲精品1234| 久久精品国产亚洲5555| 欧美日韩免费观看一区二区三区 | 亚洲新中文字幕| 美日韩丰满少妇在线观看| 国产精品久久久久久久浪潮网站| 136国产福利精品导航| 性欧美1819性猛交| 亚洲老司机av| 欧美成人午夜| 亚洲国产成人精品女人久久久 | 精品成人一区二区| 欧美一二三区在线观看| 日韩一区二区福利| 欧美黄色一级视频| 91久久国产综合久久蜜月精品| 久久久一区二区| 亚洲欧洲av一区二区三区久久| 欧美三级日本三级少妇99| 亚洲精品乱码久久久久久| 老色批av在线精品| 久久精品理论片| 国产亚洲二区| 久久久久久久97| 亚洲欧美在线看| 国产精品亚洲综合天堂夜夜| 亚洲免费一级电影| 在线一区亚洲| 国产精品黄色| 午夜欧美视频| 欧美在线视频免费观看| 国产综合色产| 另类综合日韩欧美亚洲| 久久国产精品电影| 亚洲国产99精品国自产| 亚洲国产精品一区二区www在线| 久久久久欧美| 亚洲激情av| 亚洲精品午夜精品| 国产精品日韩欧美| 久久夜色精品国产亚洲aⅴ| 久久手机精品视频| 99国产精品99久久久久久粉嫩| 日韩亚洲欧美中文三级| 国产精品久久久久久久久免费桃花| 午夜老司机精品| 久久久蜜桃一区二区人| 亚洲精选成人| 亚洲综合精品一区二区| 1000部国产精品成人观看| 亚洲欧洲一区二区在线观看| 国产精品家庭影院| 欧美 日韩 国产精品免费观看| 欧美激情一二三区| 欧美一区二区三区在线视频| 久久美女性网| 亚洲曰本av电影| 久久久噜噜噜久久狠狠50岁| 亚洲另类自拍| 欧美一二三区在线观看| 亚洲国产精品一区二区尤物区 | 久久综合狠狠综合久久综合88| 久久视频国产精品免费视频在线| 中文亚洲欧美| 久久蜜桃香蕉精品一区二区三区| 亚洲乱码国产乱码精品精| 亚洲综合色婷婷| 日韩视频免费在线| 欧美一区午夜视频在线观看| 日韩亚洲欧美高清| 久久久之久亚州精品露出| 亚洲免费视频网站| 欧美激情一区二区三区| 久久一区二区三区国产精品 | 一区在线影院| 亚洲精品三级| 在线观看成人网| 亚洲一区视频在线观看视频| 亚洲精品久久7777| 久久嫩草精品久久久精品一 | 亚洲日本中文字幕区| 国产乱码精品一区二区三区五月婷| 欧美freesex8一10精品| 国产欧美午夜| 亚洲自拍偷拍麻豆| 中文在线资源观看网站视频免费不卡| 久久久久国产免费免费| 久久av最新网址| 国产精品福利影院| 日韩西西人体444www| 亚洲精品小视频| 欧美大成色www永久网站婷| 鲁大师影院一区二区三区| 国产一区二区剧情av在线| 亚洲资源av| 欧美在线观看一区二区三区| 国产精品美女久久久久av超清| 99精品国产一区二区青青牛奶| 亚洲区中文字幕| 欧美电影免费网站| 欧美激情一区二区在线| 亚洲精华国产欧美| 欧美高清在线观看| 91久久在线视频| 一本久久a久久精品亚洲| 欧美精品在线免费播放| 日韩午夜剧场| 性欧美xxxx视频在线观看| 国产欧美日韩| 久久精品国产亚洲高清剧情介绍| 久久九九热免费视频| 伊人春色精品| 欧美激情精品久久久久久黑人| 最新高清无码专区| 亚洲影视在线播放| 国产日韩欧美不卡在线| 久久久久国产精品一区二区| 欧美不卡在线视频| 一本色道久久综合亚洲精品不| 欧美午夜激情小视频| 欧美一区二区三区成人| 欧美成人激情在线| 一本色道久久综合狠狠躁篇怎么玩| 欧美日韩a区| 亚洲综合三区| 玖玖综合伊人| 日韩一区二区免费高清| 国产精品www色诱视频| 久久精品国产一区二区三区| 亚洲国产免费看| 欧美在线关看| 日韩视频亚洲视频| 国产偷自视频区视频一区二区| 蜜臀va亚洲va欧美va天堂| 一本久久综合亚洲鲁鲁| 老司机精品久久| 亚洲性图久久| 亚洲高清视频一区| 亚洲一级片在线看| 亚洲一区免费| 国产在线乱码一区二区三区| 裸体一区二区| 这里只有精品视频在线| 美女网站久久| 亚洲在线观看视频| 亚洲国产高潮在线观看| 国产精品乱码| 欧美激情综合色| 久久精品91久久香蕉加勒比| 亚洲精品四区| 欧美a级片一区| 欧美影片第一页| 99精品欧美| 亚洲第一精品久久忘忧草社区| 欧美性开放视频| 欧美福利电影网| 久久久国产精品一区二区中文| 亚洲视频www| 99精品欧美一区二区三区| 欧美成人一区二区| 久久亚洲国产精品一区二区| 先锋影音网一区二区|