首页 > 解决方案 > 复制流数据时不断出现读取错误

问题描述

我正在尝试使用该方法将 aTStringStream中包含的数据复制TStreamReader到另一个中。如果没有读取源流,它会像宣传的那样工作,但是如果我对流读取器执行单次读取,它会抛出 EReadError 异常:流读取错误。显示问题的代码: TStringStreamCopyFrom

program Project1;

{$APPTYPE CONSOLE}

{$R *.res}

uses
  System.SysUtils,
  System.classes;

var
  FStreamRead : TStreamReader;
  AChar : char;
  OutStream : TStringStream;

begin
  FStreamRead := TStreamReader.Create(TStringStream.Create('This is test data',TEncoding.UTF8));
  FStreamRead.OwnStream;
  try
    try
      // read once
      Achar := char (FStreamRead.Read);
      OutStream := TStringStream.Create;
      try
        OutStream.CopyFrom(FStreamRead.BaseStream,4);
      finally
        OutStream.Free;
      end;
    except
      on E: Exception do
        Writeln(E.ClassName, ': ', E.Message);
    end;
  finally
    FStreamRead.Free;
    readln;
  end;
end.

注释掉这一行:

Achar := char (FStreamRead.Read);

允许无错误地完成复制。文档指出,如果方法中的计数大于零,TStream.CopyFrom它将从输入流中的当前位置执行复制,这是我需要实现的。

标签: delphistream

解决方案


TStreamReader内部使用缓冲。您根本不允许BaseStream从外部使用。


推荐阅读