Dart Stdin
最后修改于 2025 年 4 月 4 日
Dart 中的 Stdin 类提供了从标准输入流(通常是控制台)读取输入的功能。它是 Dart 的 dart:io 库的一部分,对于控制台应用程序至关重要。
Stdin 提供同步和异步方法来读取输入。它可以读取字节、行或使用各种编码转换输入。
基本定义
Stdin 代表 Dart 进程的标准输入流。可以通过 dart:io 库的顶级函数的 stdin 属性访问它。
主要功能包括行读取、字节读取、编码支持和异步操作。它对于交互式控制台应用程序至关重要。
读取单行
本示例展示了如何从控制台读取单行文本。
import 'dart:io';
void main() {
stdout.write('Enter your name: ');
String name = stdin.readLineSync() ?? 'Unknown';
print('Hello, $name!');
}
我们使用 readLineSync() 同步读取一行。如果到达 EOF,该方法返回 null,因此我们提供一个默认值。stdout.write 在打印时不会添加换行符。
$ dart main.dart Enter your name: John Hello, John!
读取数字
本示例演示了读取和解析数字输入。
import 'dart:io';
void main() {
stdout.write('Enter first number: ');
var num1 = int.tryParse(stdin.readLineSync() ?? '0') ?? 0;
stdout.write('Enter second number: ');
var num2 = int.tryParse(stdin.readLineSync() ?? '0') ?? 0;
print('Sum: ${num1 + num2}');
}
我们读取字符串并将其转换为整数。tryParse 通过返回 null 来处理无效输入,因此我们提供一个备用值。这使得程序能够更稳健地处理错误输入。
$ dart main.dart Enter first number: 12 Enter second number: 7 Sum: 19
异步读取行
本示例展示了如何异步读取输入。
import 'dart:io';
Future<void> main() async {
stdout.write('Enter your favorite color: ');
var color = await stdin.readLine();
stdout.write('Enter your age: ');
var age = await stdin.readLine();
print('$age-year-old who loves $color');
}
我们使用 readLine(),它返回一个 Future<String>。await 关键字会暂停执行,直到收到输入。这种方法是非阻塞的,更适合复杂的应用程序。
$ dart main.dart Enter your favorite color: blue Enter your age: 25 25-year-old who loves blue
读取原始字节
本示例演示了从标准输入读取原始字节。
import 'dart:io';
void main() {
stdout.writeln('Press any key to continue...');
var byte = stdin.readByteSync();
print('You pressed: $byte (${String.fromCharCode(byte)})');
}
readByteSync() 从输入中读取单个字节。我们将字节转换为其字符表示。这对于低级输入处理或单键响应很有用。
$ dart main.dart Press any key to continue... a You pressed: 97 (a)
读取直到 EOF
本示例展示了如何读取多行直到文件结束。
import 'dart:io';
void main() {
print('Enter multiple lines (Ctrl+D to end):');
var lines = <String>[];
while (true) {
var line = stdin.readLineSync();
if (line == null) break;
lines.add(line);
}
print('You entered ${lines.length} lines:');
lines.forEach(print);
}
我们在循环中读取行,直到 readLineSync() 返回 null(EOF)。收集的行存储在一个列表中。这种模式对于处理管道输入或多行用户输入很有用。
$ dart main.dart Enter multiple lines (Ctrl+D to end): hello world dart You entered 3 lines: hello world dart
最佳实践
- 错误处理:始终验证和清理用户输入
- 异步优先:在较大的应用程序中使用异步方法
- 编码:处理非 ASCII 文本时指定编码
- 提示:始终提供清晰的输入提示
来源
本教程涵盖了 Dart 的 Stdin 类,并通过实际示例展示了基本的输入读取、数字解析、异步操作和字节级访问。
作者
列出 所有 Dart 教程。