delphi - 复制流数据时不断出现读取错误
问题描述
我正在尝试使用该方法将 aTStringStream
中包含的数据复制TStreamReader
到另一个中。如果没有读取源流,它会像宣传的那样工作,但是如果我对流读取器执行单次读取,它会抛出 EReadError 异常:流读取错误。显示问题的代码: TStringStream
CopyFrom
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
它将从输入流中的当前位置执行复制,这是我需要实现的。
解决方案
TStreamReader
内部使用缓冲。您根本不允许BaseStream
从外部使用。
推荐阅读
- node.js - Heroku H10 应用程序错误 .. Node.js - 更新服务器端代码后发生错误
- c - C - 从二进制文件中读取位
- ionic-framework - Ionic:在本地主机上运行 APK?
- asp.net-core - 在 ASP .NET Core 上将 IP 地址作为视图数据返回
- amazon-web-services - 亚马逊 SES 遭到入侵
- deep-learning - 如何找到 VIA 的注解版本?
- python - 使用 LSTM 微调通用句子编码器
- javascript - RxJS 地图没有运行函数
- php - 合并 2 个具有匹配 id 的集合并删除不必要的数据
- sql - SQL 中的百分比计算