Indy WriteLn 和 ReadLn 字符串的最大长度是多少?

What is Indy WriteLn and ReadLn string max length?

使用 Indy 方法 WriteLnReadLn 发送和读取的字符串的长度是否有限制?

TIdIOHandler.WriteLn() 仅受可用内存限制。但是,请注意,它将 EOL (#13#10) 附加到输入字符串的末尾,生成一个新字符串,该字符串是原始字符串的副本,然后将该副本转换为 TIdBytes 用于发送。因此,将使用比您传入的内存更多的内存。我相信将来可以更好地优化它。

TIdIOHandler.ReadLn() 有一个可选的 AMaxLineLength 参数,默认设置为 -1。如果设置为 < 0,则将使用 TIdIOHandler.MaxLineLength 属性 代替,默认设置为 16384 字节。如果需要,您可以将 (A)MaxLineLength 设置得更高,甚至可以将其设置为 0 以完全禁用该限制。如果 (A)MaxLineLength 设置为 > 0 并且传入数据超过该限制,则后续行为取决于 TIdIOHandler.MaxLineAction 属性:

  • maException(默认):引发EIdReadLnMaxLineLengthExceeded,接收到的字节将保留在TIdIOHandler.InputBuffer中,以供后续读取。

  • maSplit:正好 (A)MaxLineLength 个字节将从 TIdIOHandler.InputBuffer 中提取并作为 String 返回,TIdIOHander.ReadLnSplit 属性 将设置为 True。剩余的字节将保留在 TIdIOHandler.InputBuffer 中以供后续读取。