가끔 델파이 모바일 앱에서 리스트 된 데이터를 통신으로 전송 할 때  단순하게 스트링 데이터로 전송하면서 속도가 느리다고 말씀하신는 분들을 몇 몇 분 보았습니다.

 

그래서 델파이에서 데이터를 읽고 쓰고 하는데 자주 사용하는 Stream 클래스들을 정리하여 보았습니다.

 

TStream은 디스크 파일, 동적 메모리 등과 같은 다양한 종류의 저장 매체에서 읽고 쓸 수 있는 스트림 개체의 기본 클래스 유형입니다.

특수한 스트림 개체를 사용하여 특정 매체에 저장된 정보를 읽고 쓰고 복사 할 수 있습니다. TStream의 각 하위 클래스들은 디스크 파일, 동적 메모리 등과 같은 특정 저장 매체에서 정보를 전송하는 메소드를 구현합니다. 스트림을 읽고 쓰고 복사하는 메소드 외에도 스트림 개체를 사용하면 응용 프로그램에서 스트림의 임의 위치를 ​​찾을 수 있습니다. TStream의 속성은 스트림의 크기 및 스트림의 현재 위치와 같은 스트림에 대한 정보를 제공합니다.

컴포넌트 스트리밍에 사용되는 메모리 및 파일 스트림과 같은 하위 스트림 개체는 전역 함수 ReadComponentRes 및 WriteComponentRes에 의해 자동으로 만들어집니다. 다른 종류의 정보를 스트리밍 하려면 특정 데이터 및 저장 요구에 따라 하위 클래스를 선택하십시오. . 다른 종류의 정보를 스트리밍하려면 특정 데이터 및 저장 요구에 따라 하위 클래스를 선택하십시오.

 

  • TFileStream – 파일 작업.
  • TStringStream - 메모리내 문자열 조작.
  • TMemoryStream - 메모리 버퍼로 작업하기.
  • TWinSocketStream - 소켓 연결을 통해 읽고 쓰기.
  • TOleStream - COM 인터페이스를 사용하여 읽기 및 쓰기.

 

 

TFileStream

TFileStream을 사용하면 응용 프로그램에서 디스크의 파일을 읽고 쓸 수 있습니다.

TFileStream을 사용하여 디스크 파일의 정보에 액세스하십시오. TFileStream은 명명 된 파일을 열어 읽고 읽을 수있는 메소드를 제공합니다. 응용 프로그램에 이미 해당 파일에 대한 핸들이 있고 해당 모드에서 연 경우 THandleStream을 대신 사용하십시오.

버퍼링을 지원하는 파일스트림을 이용해 파일 I/O 작업을 더 빠르게 진행할 수 있는 TBufferedFileStream이 RAD Studio 10.1 베를린에 추가되었습니다.

http://tech.devgear.co.kr/index.php?mid=delphi_news&search_keyword=stream&search_target=title_content&document_srl=422069

 

 

TStringStream

TStringStream은 긴 문자열로 저장된 정보에 파일과 같은 액세스를 제공합니다.

TStringStream을 사용하여 데이터를 I / O 기능으로 확장 된 긴 문자열로 저장합니다. TStringStream은 텍스트를 보관할 수 있을 뿐만 아니라 다른 저장 매체에서 텍스트를 읽거나 저장할 수 있는 중간 개체로 유용합니다. TStringStream은 액세스하기 어려운 매체에서 가져온 텍스트를 조작하는 메커니즘을 제공합니다.

 

 

TMemoryStream

TMemoryStream은 동적 메모리에 데이터를 저장하는 스트림입니다.

TMemoryStream을 사용하여 파일과 같은 액세스 기능으로 강화 된 동적 메모리 버퍼에 데이터를 저장하십시오. TMemoryStream은 스트림 객체의 일반적인 I / O 기능을 제공하는 동시에 동적 메모리 버퍼를 관리하는 메소드 및 속성을 소개합니다.

메모리 스트림은 정보를 보유 할 수 있을 뿐만 아니라 다른 저장 매체에서 정보를 읽거나 저장할 수 있는 중간 객체로서 유용합니다. 스트림의 내용을 비교하거나 접근하기 어려운 매체에 저장된 데이터를 조작하는 데 유용한 형식을 제공합니다.

 

아래는 TMemoryStream을 사용하는 예제입니다.

http://tech.devgear.co.kr/index.php?mid=delphi_news&search_keyword=stream&search_target=title_content&document_srl=424296

 

 

TWinSocketStream

TWinSocketStream은 응용 프로그램이 소켓 연결을 읽고 쓸 수 있는 서비스를 제공하는 스트림입니다.

TWinSocketStream을 사용하여 블로킹 소켓 연결을 통해 정보를 읽거나 쓰십시오. Windows 소켓 객체에는 소켓 연결을 읽거나 소켓 연결에 쓰는 메소드가 포함됩니다. 그러나 이러한 메소드는 소켓 연결을 끊을 때 시간을 초과하거나 읽을 때까지 소켓 연결이 준비 될 때까지 기다리는 메커니즘을 제공하지 않습니다.

 

소켓이 비 블로킹 소켓 인 경우 소켓 연결의 알림에 대한 응답으로 읽기 및 쓰기가 비 동기적으로 발생하기 때문에 타임 아웃 또는 대기 메커니즘이 부족하지는 않습니다. 그러나 블로킹 소켓의 경우 소켓을 사용하는 응용 프로그램이 무기한 중지되지 않도록 TWinSocketStream에서 제공하는 이러한 메커니즘이 필요합니다.

Windows 소켓 스트림을 사용하려면 TWinSocketStream의 인스턴스를 만들고 스트림의 메소드를 사용하여 데이터를 읽거나 쓰고 Windows 소켓 스트림을 비웁니다.

참고: TWinSocketStream은 비 블로킹 소켓에서는 작동하지 않습니다.

 

 

TOleStream

TOleStream은 OLE 개체에서 제공하는 스트리밍 인터페이스를 통해 정보를 읽고 씁니다.

TOleStream을 사용하여 OLE 스트림 인터페이스 용 TStream 래퍼를 만듭니다. TOleStream은 OLE 스트림의 스트리밍 인터페이스를 사용하여 정보를 읽고 씁니다. TActiveXControl 개체는 TOleStream을 사용하여 스트림에서 자신을로드하거나 자신을 스트림에 저장합니다.

 

이 예제에서는 기본 제공 컴포넌트 스트리밍 지원을 사용하여 컴포넌트를 문자열로 변환하고 해당 문자열을 컴포넌트로 다시 변환하는 방법을 보여줍니다.

 

   type

     TForm1 = class(TForm)

        Memo1: TMemo;

        Button1: TButton;

        Button2: TButton;

        procedure Button1Click(Sender: TObject);

        procedure Button2Click(Sender: TObject);

        procedure FormCreate(Sender: TObject);

        procedure FormDestroy(Sender: TObject);

    private

        { Private declarations }

    public

    { Public declarations }

    end;

    TMyScrollBar = class(TScrollBar)

    end;

 

  var

    Form1: TForm1;

    ScrollBar1: TMyScrollBar;

 

  implementation

 

  {$R *.dfm}

 

  function ComponentToStringProc(Component: TComponent): string;

  var

    BinStream:TMemoryStream;

    StrStream: TStringStream;

    s: string;

  begin

    BinStream := TMemoryStream.Create;

    try

      StrStream := TStringStream.Create(s);

      try

        BinStream.WriteComponent(Component);

        BinStream.Seek(0, soFromBeginning);

        ObjectBinaryToText(BinStream, StrStream);

        StrStream.Seek(0, soFromBeginning);

        Result:= StrStream.DataString;

      finally

        StrStream.Free;

      end;

    finally

      BinStream.Free

    end;

  end;

 

  function StringToComponentProc(Value: string): TComponent;

  var

    StrStream:TStringStream;

    BinStream: TMemoryStream;

  begin

    StrStream := TStringStream.Create(Value);

    try

      BinStream := TMemoryStream.Create;

      try

        ObjectTextToBinary(StrStream, BinStream);

        BinStream.Seek(0, soFromBeginning);

        Result:= BinStream.ReadComponent(nil);

      finally

        BinStream.Free;

      end;

    finally

      StrStream.Free;

    end;

  end;

 

  procedure TForm1.Button1Click(Sender: TObject);

  begin

    Memo1.Text:= ComponentToStringProc(ScrollBar1);

  end;

 

// Edit the scrollbar parameters in the memo, click this

// button and see the scrollbar change.

  procedure TForm1.Button2Click(Sender: TObject);

  begin

    ScrollBar1.Free;

    ScrollBar1:= (StringToComponentProc(Memo1.Text) as TMyScrollBar);

    ScrollBar1.Parent:= Form1;

    ScrollBar1.Visible:= TRUE;

end;

 

  procedure TForm1.FormCreate(Sender: TObject);

  begin

    ScrollBar1:= TMyScrollBar.Create(Form1);

    ScrollBar1.Parent:= Form1;

    ScrollBar1.Visible:= TRUE;

    ScrollBar1.Top:= 48;

    ScrollBar1.Left:= 250;

    ScrollBar1.Name:= 'Ricksbar';

  end;

 

  procedure TForm1.FormDestroy(Sender: TObject);

  begin

    ScrollBar1.Free;

  end;

 

  initialization

 

  RegisterClass(MyScrollBar);

 

 

번호 제목 글쓴이 날짜 조회 수
공지 [DelphiCon 요약] 코드사이트 로깅 실전 활용 기법 (Real-world CodeSite Logging Techniques) 관리자 2021.01.19 15443
공지 [UX Summit 요약] 오른쪽 클릭은 옳다 (Right Click is Right) 관리자 2020.11.16 13962
공지 [10.4 시드니] What's NEW! 신기능 자세히 보기 관리자 2020.05.27 16499
공지 RAD스튜디오(델파이,C++빌더) - 고객 사례 목록 관리자 2018.10.23 22055
공지 [데브기어 컨설팅] 모바일 앱 & 업그레이드 마이그레이션 [1] 관리자 2017.02.06 23268
공지 [전체 목록] 이 달의 기술자료 & 기술레터 관리자 2017.02.06 18923
공지 RAD스튜디오(델파이, C++빌더) - 시작하기 [1] 관리자 2015.06.30 39259
공지 RAD스튜디오(델파이,C++빌더) - 모바일 앱 개발 사례 (2020년 11월 업데이트 됨) 험프리 2014.01.16 174726
1123 David I의 31 XE3 퀵 비디오 - HTML5 빌더의 Canvas, Storage, Audio/Video 지원 관리자 2012.10.18 5326
1122 David I의 31일 동영상(한글자막) - 멀티-티어 마스터(고객)/디테일(주문) 데이터베이스 앱 개발하기 관리자 2013.05.20 5286
1121 David I의 31일 동영상(한글자막) - 기존 2D(HD) 앱에 3D콘트롤 사용하기(윈도우&맥용)(델파이 동일 적용 가능 관리자 2013.04.25 5277
1120 David I의 31일 동영상(한글자막) - 라이브바인딩과 액션을 조합한 앱 만들기(윈도우&맥 용)(델파이 동일 적용 가능) 관리자 2013.05.09 5264
1119 CodeRage7 : '델파이' 다시보기 관리자 2012.11.24 5261
1118 짐 맥키트(Jim McKeeth) - 당신의 뇌를 델파이에 연결하기(Emotiv EPOC) Humphery 2014.03.25 5251
1117 QR 코드를 만들고 스캔(읽는) 방법 Humphery 2014.07.24 5247
1116 [델파이 문법] 문법 요소 #8 file 관리자 2012.11.01 5244
1115 TeeChart 컴포넌트를 통해 다양한 차트 및 그래프로 데이터를 출력할 수 있습니다. file 험프리 2016.08.30 5242
1114 David I의 31일 동영상(한글자막) - C++11 부스트 알고리즘 라이브러리 C++빌더 64-bit에서 사용하기 관리자 2013.05.03 5214
1113 David I의 31일 동영상(한글자막) - 인터베이스XE3 ToGo를 사용한 C++데이터베이스 앱 만들기 관리자 2013.05.14 5212
1112 Delphi XE4에서 손쉽게 iOS 프로비져닝 등록하는 방법 [4] file c2design 2013.05.28 5198
1111 델파이/C++빌더/RAD Studio XE3 업데이트1 다운로드 및 보완사항 리스트 관리자 2012.12.21 5194
1110 [C++빌더 XE3 비디오 31] ClientDataSet을 이용하여 나만의 첫번째 Dataset C++ 파이어몽키 앱 만들기 관리자 2013.01.09 5148
1109 Turbo Pascal 출시 30년 - '즐거운 소프트웨어 개발'은 계속됩니다. 관리자 2013.01.18 5137
1108 짐 맥키트(Jim McKeeth) - 열손가락과 델파이를 연결하다.(Leap Motion 연동) Humphery 2014.04.04 5090
1107 [Delphi-iOS] Xcode를 사용하여 C 언어로 작성된 함수를 Delphi-iOS에서 호출하기 관리자 2013.05.20 5085
1106 [안드로이드] 외부어플 브라우져 및 PDF 호출 방법 c2design 2013.10.29 5067
1105 RAD Studio / Delphi / C++Builder XE3 업데이트 2 파일 다운로드 관리자 2013.01.28 5053
1104 [따라하기] 도서대여 프로그램 만들기 - 3, 도서관리 기능 개발 [2] file 험프리 2017.01.26 5024