zoukankan      html  css  js  c++  java
  • 测试 TStreamWriter、TStreamReader


    TStreamWriter 和 TStringWriter 都是继承于抽象类: TTextWriter;
    TStreamReader 和 TStringReader 都是继承于抽象类: TTextReader.

    它们的功能相似, 不过 TStreamWriter、TStreamReader 又有了 "流" 的特性, 比较适合对字符串流的读写.

    unit Unit1;
    
    interface
    
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls;
    
    type
      TForm1 = class(TForm)
        Button1: TButton;
        Button2: TButton;
        Button3: TButton;
        Button4: TButton;
        procedure Button1Click(Sender: TObject);
        procedure Button2Click(Sender: TObject);
        procedure Button3Click(Sender: TObject);
        procedure Button4Click(Sender: TObject);
      end;
    
    var
      Form1: TForm1;
    
    implementation
    
    {$R *.dfm}
    
    const FilePath = 'c:\temp\test.txt';
    
    //貌似是流操作, 其实写入的非字符串类型也都转换成了字符串
    procedure TForm1.Button1Click(Sender: TObject);
    var
      Writer: TStreamWriter;
      Reader: TStreamReader;
    begin
      Writer := TStreamWriter.Create(FilePath);
      Writer.WriteLine('string');
      Writer.WriteLine(123);
      Writer.WriteLine(True);
      Writer.WriteLine(3.14);
      Writer.Close;
      Writer.Free;
    
      Reader := TStreamReader.Create(FilePath);
      ShowMessage(Reader.ReadToEnd);
      Reader.Close;
      Reader.Free;
    end;
    
    //读写时可指定字符编码
    procedure TForm1.Button2Click(Sender: TObject);
    var
      Writer: TStreamWriter;
      Reader: TStreamReader;
    begin
      {参数 2 如果是 True 将会在已有文件的后面添加; False 是新建文件}
      Writer := TStreamWriter.Create(FilePath, False, TEncoding.Unicode);
      Writer.WriteLine('万一的 Delphi 博客');
      Writer.Close;
      Writer.Free;
    
      Reader := TStreamReader.Create(FilePath, Tencoding.Unicode);
      ShowMessage(Reader.ReadToEnd);
      Reader.Close;
      Reader.Free;
    end;
    
    //不指定编码时, 默认的是 UTF8
    procedure TForm1.Button3Click(Sender: TObject);
    var
      Writer: TStreamWriter;
      Reader: TStreamReader;
    begin
      Writer := TStreamWriter.Create(FilePath);
      Writer.Write('万一的 Delphi 博客');
      Writer.Close;
      Writer.Free;
    
      Reader := TStreamReader.Create(FilePath);
      ShowMessage(Reader.CurrentEncoding.ClassName); {TUTF8Encoding}
      Reader.EndOfStream;
      Reader.Close;
      Reader.Free;
    end;
    
    //可基于另一个 TStream 创建; 从 BaseStream 上看它的确就是个流
    procedure TForm1.Button4Click(Sender: TObject);
    var
      Writer: TStreamWriter;
      Reader: TStreamReader;
    begin
      Writer := TStreamWriter.Create(TFileStream.Create(FilePath, fmCreate), TEncoding.UTF8);
      Writer.Write('万一的 Delphi 博客');
      Writer.BaseStream.Free;
      Writer.Close;
      Writer.Free;
    
      Reader := TStreamReader.Create(TFileStream.Create(FilePath, fmOpenRead), TEncoding.UTF8);
      ShowMessage(Reader.ReadLine); {万一的 Delphi 博客}
      Reader.BaseStream.Free;
      Reader.Close;
      Reader.Free;
    end;
    
    end.
    
  • 相关阅读:
    docker指令汇总
    springboot(八) 嵌入式Servlet容器自动配置原理和容器启动原理
    RabbitMQ 消息确认机制
    RabbitMQ 最常用的三大模式
    RabbitMQ 核心概念
    RabbitMQ 之简单队列
    Spring 详解(三)------- SpringMVC拦截器使用
    slf4j 搭配 log4j2 处理日志
    Spring 详解(二)------- AOP关键概念以及两种实现方式
    Spring 详解(一)------- AOP前序
  • 原文地址:https://www.cnblogs.com/del/p/1581979.html
Copyright © 2011-2022 走看看