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

 

그래서 델파이에서 데이터를 읽고 쓰고 하는데 자주 사용하는 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 14390
공지 [UX Summit 요약] 오른쪽 클릭은 옳다 (Right Click is Right) 관리자 2020.11.16 13023
공지 [10.4 시드니] What's NEW! 신기능 자세히 보기 관리자 2020.05.27 15532
공지 RAD스튜디오(델파이,C++빌더) - 고객 사례 목록 관리자 2018.10.23 21065
공지 [데브기어 컨설팅] 모바일 앱 & 업그레이드 마이그레이션 [1] 관리자 2017.02.06 22297
공지 [전체 목록] 이 달의 기술자료 & 기술레터 관리자 2017.02.06 17933
공지 RAD스튜디오(델파이, C++빌더) - 시작하기 [1] 관리자 2015.06.30 38228
공지 RAD스튜디오(델파이,C++빌더) - 모바일 앱 개발 사례 (2020년 11월 업데이트 됨) 험프리 2014.01.16 173741
250 [DelphiCon 요약] High DPI 고해상도를 VCL에서 활용하기 (Leveraging High DPI in VCL Applications) 관리자 2021.01.13 763
249 [DelphiCon 요약] Spring4D 소개 - 델파이 개발을 한수준 높이기 (Introduction to Spring4D - Taking Delphi Development to the Next Level) 관리자 2021.01.08 1135
248 [DelphiCon 요약] 델파이로 함수형 프로그래밍하기 (Functional Programming With Delphi) 관리자 2020.12.29 707
247 [DelphiCon 요약] 델파이 고성능 구현 (High Performance Delphi) 관리자 2020.12.27 890
246 [DelphiCon 요약] 델파이 코드 빠르게 작성하기 (Code Faster in Delphi) 관리자 2020.12.22 607
245 델파이 윈도우 앱 샘플 – BLOB 스트림을 내/외부에서 쉽게 사용하기 관리자 2020.12.15 359
244 델파이 웹 개발: TMS WEB CORE VS. UNIGUI VS. INTRAWEB 관리자 2020.12.10 1030
243 1PASSWORD: 델파이로 개발된 BEST 패스워드 관리 프로그램 관리자 2020.12.07 849
242 [델파이 게임 개발] 겟잇(GETIT)에서 ALIEN INVASION 다운로드 받기 관리자 2020.11.30 394
241 [DelphiFeeds.com 리뉴얼] 새롭게, 델파이 개발자들에게 매우 유용한 뉴스 피드를 모아서 제공합니다. 관리자 2020.11.19 335
240 델파이 개발자용 웹 개발 기술들 비교 및 평가 (Evaluating Web Development Frameworks for Delph) file 관리자 2020.11.17 497
239 델파이에서 파이썬 표현식 활용하기 (PYTHON4DELPHI 샘플 앱) 관리자 2020.11.03 870
238 DELPHICON 2020, 곧 시작됩니다! file 관리자 2020.10.27 284
237 델파이용 볼드(BOLD FOR DELPHI) 오픈 소스 공개! 관리자 2020.09.25 480
236 델파이 개발자를 위한 파이썬 file 관리자 2020.09.23 567
235 [팁] VLC 플레이어(ActiveX Import 해) 사용하기 file 험프리 2020.09.22 975
234 [10.4 시드니][업데이트 1] 델파이 코드 인사이트 새로운 기능 관리자 2020.09.10 385
233 스레드 사용시 로긴오류 나마 2020.09.03 298
232 [무료 툴] 델파이 JSON 데이터 자동 연동 프로그램 file 관리자 2020.07.20 805
231 [10.4 시드니 신기능] 언어 서버 프로토콜 (LSP, Language Server Protocol) 관리자 2020.06.04 662