метод readLineSync
Считывает строку из stdin.
Ожидает, пока не станет доступна полная строка.
Строки могут заканчиваться либо <CR><LF>, либо <LF>. В Windows, если stdioType stdin имеет значение StdioType.terminal, терминатором также может быть одиночный <CR>.
Байты ввода преобразуются в строку с помощью encoding. Если encoding не указан, используется значение по умолчанию — systemEncoding.
Если retainNewlines имеет значение false, возвращаемая строка не будет содержать завершающий терминатор строки. Если true, возвращаемая строка будет содержать терминатор строки. Значение по умолчанию — false.
Если конец файла достигнут после считывания байтов из stdin, эти данные возвращаются без терминатора строки. Возвращает null, если перед концом ввода не было считано ни одного байта.
Реализация
String? readLineSync(
{Encoding encoding = systemEncoding, bool retainNewlines = false}) {
const CR = 13;
const LF = 10;
final List<int> line = <int>[];
// On Windows, if lineMode is disabled, only CR is received.
bool crIsNewline = Platform.isWindows &&
(stdioType(stdin) == StdioType.terminal) &&
!lineMode;
if (retainNewlines) {
int byte;
do {
byte = readByteSync();
if (byte < 0) {
break;
}
line.add(byte);
} while (byte != LF && !(byte == CR && crIsNewline));
if (line.isEmpty) {
return null;
}
} else if (crIsNewline) {
// CR and LF are both line terminators, neither is retained.
while (true) {
int byte = readByteSync();
if (byte < 0) {
if (line.isEmpty) return null;
break;
}
if (byte == LF || byte == CR) break;
line.add(byte);
}
} else {
// Case having to handle CR LF as a single unretained line terminator.
outer:
while (true) {
int byte = readByteSync();
if (byte == LF) break;
if (byte == CR) {
do {
byte = readByteSync();
if (byte == LF) break outer;
line.add(CR);
} while (byte == CR);
// Fall through and handle non-CR character.
}
if (byte < 0) {
if (line.isEmpty) return null;
break;
}
line.add(byte);
}
}
return encoding.decode(line);
}
© 2012 the Dart project authors
Licensed under the BSD 3-Clause "New" or "Revised" License.
https://api.dart.dev/stable/2.19.6/dart-io/Stdin/readLineSync.html