Um in einem Stream die Strings ohne LF/CR trennen zu können, musst du vorher die Stringlänge abspeichern. Ein Byte reicht da oft nicht aus (255 Zeichen sind schnell erreicht), nehmen wir also realistischerweise ein Wort. Du liest also Stringlänge (2 Byte) + String (x Byte).
In einer Textdatei liest du String (x Byte) + LF (1 Byte) + CR (1 Byte).
Macht also keinen Unterschied.
(Selbst wenn man die Länge auf nur ein Byte beschränkt, hat man günstigstenfalls ein Byte gespart.)
Über die Algorithmen kann ich nichts sagen, die hab ich nämlich nicht geschrieben.