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

 

그래서 델파이에서 데이터를 읽고 쓰고 하는데 자주 사용하는 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 15792
공지 [UX Summit 요약] 오른쪽 클릭은 옳다 (Right Click is Right) 관리자 2020.11.16 14198
공지 [10.4 시드니] What's NEW! 신기능 자세히 보기 관리자 2020.05.27 16752
공지 RAD스튜디오(델파이,C++빌더) - 고객 사례 목록 관리자 2018.10.23 22312
공지 [데브기어 컨설팅] 모바일 앱 & 업그레이드 마이그레이션 [1] 관리자 2017.02.06 23627
공지 [전체 목록] 이 달의 기술자료 & 기술레터 관리자 2017.02.06 19146
공지 RAD스튜디오(델파이, C++빌더) - 시작하기 [1] 관리자 2015.06.30 39578
공지 RAD스튜디오(델파이,C++빌더) - 모바일 앱 개발 사례 (2020년 11월 업데이트 됨) 험프리 2014.01.16 175002
54 TListView 행별로 배경색 설정 및 글꼴변경하기 험프리 2017.09.08 1696
53 [REST API][실습] 데이터셋 기반 REST API 개발하기 험프리 2017.06.13 2188
52 [REST API][실습] REST API 클라이언트 개발하기(REST Client 이용) [2] 험프리 2017.05.23 7125
51 [REST API][실습] REST API 서버 개발하기(엔드포인트 구현, RAD 서버 이용) [5] 험프리 2017.05.23 4567
50 이 달의 기술자료 - 2017년 02월 file 험프리 2017.01.31 704
» 델파이에서 사용하는 각 Stream(스트림) 정리 김원경 2017.01.04 6657
48 [RAD서버] [웨비나-딥다이브] 매장 관리 솔루션 개발하기(개발 시나리오와 데모) file 험프리 2016.11.02 1331
47 [동영상] 앱테더링 데이터 암호화/복호화 방법 file 험프리 2016.11.01 810
46 이 달의 기술자료 - 2016년 06월 file 험프리 2016.05.27 633
45 [베를린] TBufferedFileStream을 이용해 TFileStream 보다 더 빠르게 파일을 읽고, 쓸수 있습니다. file 험프리 2016.05.09 3101
44 인터베이스 데이터베이스와 테이블 생성하기 [3] file 험프리 2016.01.07 2520
43 [따라하기] 건강데이터 수집 및 기록 시스템 #1 - BLE 기반 스마트 체중계에서 실시간 데이터 받기 [1] Humphery 2015.10.02 5823
42 XE7과 XE8에서 iOS 9용 iOS 32비트 애플리케이션을 빌드하는 절차안내. Humphery 2015.09.25 475
41 [따라하기] 위험지역 경보 시스템 #1 - 위험지역 진입 경보앱 만들기 [1] Humphery 2015.07.30 3767
40 [하이브리드 앱 개발] 웹페이지에서 델파이 함수 호출하기 Humphery 2015.06.26 4105
39 안드로이드 웹브라우저에서 "tel:, sms:" 링크가 동작하지 않는 이슈 해결하기 Humphery 2015.06.26 4855
38 [XE8] 번거로운 수작업을 줄여 핵심기능 개발에 집중할 수 있는 개발 생산성 향상도구 Humphery 2015.04.28 901
37 [XE8] 근거리 위치기반 서비스를 개발할 수 있는 비콘(Beacon) 연동하기 [1] Humphery 2015.04.15 3953
36 모바일 앱 라이프사이클 이벤트 처리하기 Humphery 2015.04.09 1569
35 모바일 앱 라이프 사이클 이벤트 처리하기(앱 완전 구동 후 실행하기) [1] Humphery 2015.04.09 946