Spec-Zone.ru › Dart 1

dart:io

Метод readLineSync

String readLineSync({Encoding encoding: SYSTEM_ENCODING, bool retainNewlines: false })

Синхронно считывает строку из stdin. Этот вызов будет блокировать, пока не станет доступна полная строка.

Аргумент encoding может использоваться для изменения способа декодирования входных данных. По умолчанию используется SYSTEM_ENCODING.

Если retainNewlines равно false, возвращаемая строка не будет содержать конечный символ новой строки. Если true, возвращаемая строка будет содержать символ окончания строки. По умолчанию false.

Если конец файла достигается после чтения любых байтов из stdin, эти данные возвращаются. Возвращает null , если перед концом входных данных не было байтов.

Исходный код

String readLineSync(
    {Encoding encoding: SYSTEM_ENCODING, 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 handel 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 Creative Commons Attribution-ShareAlike License v4.0.
https://api.dartlang.org/stable/1.24.3/dart-io/Stdin/readLineSync.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API