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

 

그래서 델파이에서 데이터를 읽고 쓰고 하는데 자주 사용하는 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 14387
공지 [UX Summit 요약] 오른쪽 클릭은 옳다 (Right Click is Right) 관리자 2020.11.16 13023
공지 [10.4 시드니] What's NEW! 신기능 자세히 보기 관리자 2020.05.27 15532
공지 RAD스튜디오(델파이,C++빌더) - 고객 사례 목록 관리자 2018.10.23 21064
공지 [데브기어 컨설팅] 모바일 앱 & 업그레이드 마이그레이션 [1] 관리자 2017.02.06 22297
공지 [전체 목록] 이 달의 기술자료 & 기술레터 관리자 2017.02.06 17933
공지 RAD스튜디오(델파이, C++빌더) - 시작하기 [1] 관리자 2015.06.30 38228
공지 RAD스튜디오(델파이,C++빌더) - 모바일 앱 개발 사례 (2020년 11월 업데이트 됨) 험프리 2014.01.16 173741
190 [따라하기] 인공지능 오목게임(2) - 최종결과물 [2] file 대화마을 2017.09.14 1611
189 [따라하기] 인공지능 오목게임(1) - 만들기 [2] file 대화마을 2017.09.12 5488
188 TListView 행별로 배경색 설정 및 글꼴변경하기 험프리 2017.09.08 1659
187 [FireDac] FDConnection 데이터베이스 Connection 설정 file 김원경 2017.09.01 4514
186 델파이의 새 달력콤포넌트 기능향상 및 버그수정.. 나비스 2017.08.18 1195
185 QR/바코드 스캐너 앱 샘플코드(ZXing, TFrameStand 사용) [1] 험프리 2017.08.04 3028
184 블루투스 바코드 스캐너(BI-07) 안드로이드 라이브러리를 델파이에서 연동하는 방법 [1] file 험프리 2017.03.24 2637
183 리팩토링 3-메소드 추출 file 김원경 2017.02.24 721
182 리팩토링 2-수퍼 클래스(인터페이스) 추출하기 file 김원경 2017.02.23 548
181 리펙토링 1-클래스, 정적메소드, 속성, 필드 이동하기 file 김원경 2017.02.23 645
180 [오픈소스] 델파이 컴포넌트, 프레임워크, 라이브러리, 리소스 등등 관리자 2017.02.15 2024
179 [마이그레이션] 64비트 적용 시 검토할 사항들 file 험프리 2017.02.08 3341
178 [따라하기] 도서대여 프로그램 만들기 - 6, 통합테스트 file 험프리 2017.02.02 1341
177 [따라하기] 도서대여 프로그램 만들기 - 5, 도서대여 기능 개발 file 험프리 2017.02.02 2757
176 [따라하기] 도서대여 프로그램 만들기 - 4, 회원관리 기능 개발 [1] file 험프리 2017.02.01 1785
175 델파이 개체를 메모리에서 해제할 때 Free와 FreeAndNil의 차이점 김원경 2017.02.01 2392
174 [따라하기] 도서대여 프로그램 만들기 - 3, 도서관리 기능 개발 [2] file 험프리 2017.01.26 4975
173 [따라하기] 도서대여 프로그램 만들기 - 2, 메인화면 개발 [2] file 험프리 2017.01.26 2426
172 [따라하기] 도서대여 프로그램 만들기 - 1, 분석, 설계 [4] file 험프리 2017.01.26 5775
» 델파이에서 사용하는 각 Stream(스트림) 정리 김원경 2017.01.04 6003