Home > Mobile >  What is Indy WriteLn and ReadLn string max length?
What is Indy WriteLn and ReadLn string max length?

Time:12-21

Is there a limit in the length of the string sent and read with the Indy methods WriteLn and ReadLn?

CodePudding user response:

TIdIOHandler.WriteLn() is limited only by available memory. However, do note that it appends an EOL (#13#10) to the end of the input string, producing a new string which is a copy of the original, and then it converts that copy to a TIdBytes for sending. So more memory will be used than just what you pass in. I'm sure this can be optimized better in the future.

TIdIOHandler.ReadLn() has an optional AMaxLineLength parameter that is set to -1 by default. If it is set to < 0, the TIdIOHandler.MaxLineLength property will be used instead, which is set to 16384 bytes by default. You can set (A)MaxLineLength higher if needed, or you can even set it to 0 to disable the limit completely. If (A)MaxLineLength is set to > 0 and incoming data exceeds that limit, the subsequent behavior depends on the TIdIOHandler.MaxLineAction property:

  • maException (the default): an EIdReadLnMaxLineLengthExceeded is raised, and the received bytes will remain in the TIdIOHandler.InputBuffer for subsequent reads.

  • maSplit: exactly (A)MaxLineLength number of bytes will be extracted from the TIdIOHandler.InputBuffer and returned as a String, and the TIdIOHander.ReadLnSplit property will be set to True. The leftover bytes will remain in the TIdIOHandler.InputBuffer for subsequent reads.

  • Related