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

 

그래서 델파이에서 데이터를 읽고 쓰고 하는데 자주 사용하는 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 15427
공지 [UX Summit 요약] 오른쪽 클릭은 옳다 (Right Click is Right) 관리자 2020.11.16 13961
공지 [10.4 시드니] What's NEW! 신기능 자세히 보기 관리자 2020.05.27 16497
공지 RAD스튜디오(델파이,C++빌더) - 고객 사례 목록 관리자 2018.10.23 22054
공지 [데브기어 컨설팅] 모바일 앱 & 업그레이드 마이그레이션 [1] 관리자 2017.02.06 23268
공지 [전체 목록] 이 달의 기술자료 & 기술레터 관리자 2017.02.06 18922
공지 RAD스튜디오(델파이, C++빌더) - 시작하기 [1] 관리자 2015.06.30 39253
공지 RAD스튜디오(델파이,C++빌더) - 모바일 앱 개발 사례 (2020년 11월 업데이트 됨) 험프리 2014.01.16 174698
1143 [도서/PDF] 한 번에 개발하는 안드로이드&iOS 앱 with 델파이 2편 - 부록 관리자 2020.02.06 464
1142 [도서/PDF] 한 번에 개발하는 안드로이드&iOS 앱 with 델파이 2편 - 8장. 3D 사용자 인터페이스(UI) 구현 관리자 2020.02.06 446
1141 [도서/PDF] 한 번에 개발하는 안드로이드&iOS 앱 with 델파이 2편 - 7장. 카메라(뷰 포인트)의 이해와 활용 관리자 2020.02.06 643
1140 [도서/PDF] 한 번에 개발하는 안드로이드&iOS 앱 with 델파이 2편 - 6장. 파이어몽키 3D 오브젝트와 좌표계 이해 관리자 2020.02.06 463
1139 [도서/PDF] 한 번에 개발하는 안드로이드&iOS 앱 with 델파이 2편 - 5장. 클라우드 서비스(BaaS)의 활용 관리자 2020.02.06 427
1138 [도서/PDF] 한 번에 개발하는 안드로이드&iOS 앱 with 델파이 2편 - 4장. 웹 서비스 데이터 이용하기 관리자 2020.02.06 487
1137 [도서/PDF] 한 번에 개발하는 안드로이드&iOS 앱 with 델파이 2편 - 3장. 데이터스냅으로 멀티티어 데이터베이스 앱 만들기 관리자 2020.02.06 484
1136 [도서/PDF] 한 번에 개발하는 안드로이드&iOS 앱 with 델파이 2편 - 2장(실습). 사원 정보 실전 앱 관리자 2020.02.06 489
1135 [도서/PDF] 한 번에 개발하는 안드로이드&iOS 앱 with 델파이 2편 - 2장. 임베디드 데이터베이스 활용 앱 만들기 (IBLite, SQLite) 관리자 2020.02.06 459
1134 [도서/PDF] 한 번에 개발하는 안드로이드&iOS 앱 with 델파이 2편 - 1장. 스마트폰의 정보 사용하기 관리자 2020.02.06 471
1133 [도서/PDF] 한 번에 개발하는 안드로이드&iOS 앱 with 델파이 2편 - 0장. 책 소개. 저자 소개. 목차 file 관리자 2020.02.06 411
1132 3회차 "커뮤니케이션 데이 - 마이그레이션" 회고 험프리 2020.02.05 194
1131 [도서/PDF] 한 번에 개발하는 안드로이드&iOS 앱 with 델파이 1편 - 0장. 책 소개. 저자 소개. 목차 file 관리자 2020.02.05 507
1130 [도서/PDF] 한 번에 개발하는 안드로이드&iOS 앱 with 델파이 1편 - 8장(실습). 웹서비스를 이용한 음반 정보 앱 [1] 관리자 2020.02.04 415
1129 [도서/PDF] 한 번에 개발하는 안드로이드&iOS 앱 with 델파이 1편 - 8장(실습). TFrame [1] 관리자 2020.02.04 554
1128 [도서/PDF] 한 번에 개발하는 안드로이드&iOS 앱 with 델파이 1편 - 8장. 애니메이션과 효과 적용하기 관리자 2020.02.04 393
1127 [도서/PDF] 한 번에 개발하는 안드로이드&iOS 앱 with 델파이 1편 - 7장. 센서와 서비스로 스마트폰 제어하기 [1] 관리자 2020.02.04 442
1126 [도서/PDF] 한 번에 개발하는 안드로이드&iOS 앱 with 델파이 1편 - 6장. UI 콘트롤로 화면 만들기 관리자 2020.02.04 431
1125 [도서/PDF] 한 번에 개발하는 안드로이드&iOS 앱 with 델파이 1편 - 5장. UI 컨트롤 기본 사용법 관리자 2020.02.04 409
1124 [도서/PDF] 한 번에 개발하는 안드로이드&iOS 앱 with 델파이 1편 - 4장. 다양한 UI 콘트롤 살펴보기 관리자 2020.02.04 404