当我使用缓冲区而不是console()从我的代码中检索输出时有什么区别?
答案 0 :(得分:1)
Console
使用的System.console()
类似乎针对交互式基于字符的I / O,由实际控制台(例如{{1})提供Windows中的窗口或类Unix系统中的终端。因此,系统控制台可能并不总是可用,具体取决于底层操作系统以及JVM的启动方式。
另一方面,Scanner
适用于任何输入流,包括文件和标准输入。它更灵活,但它不提供cmd.exe
所做的某些特定于控制台的功能,例如读取文本的能力 - 通常是密码 - 而不会将其回送到控制台。
答案 1 :(得分:0)
Console
类可以轻松接受来自命令行的输入,包括回显和未回显。无回声意味着您在编写文本时会在控制台中看到一些特殊字符(例如*,?等),就像在Facebook中输入密码一样。 :)它的format()
方法也可以很容易地将格式化的输出写入命令行(比如制作* s的金字塔或格式化的日期和货币格式等)。它还有助于为单元测试编写测试引擎。或者您可以使用它来为您提供简单的CLI(命令行界面)而不是GUI(图形用户界面),以防您想要创建一个真正简单的小应用程序。是的,它也是系统相关的,这意味着您不能总是依赖您的系统来为您提供控制台实例。
现在关于缓冲,它实际上是一种在I / O(即输入和输出)中使用的技术,当您与流进行交互时(无论是字符流还是字节流,无论是来自控制台还是套接字或者是文件)。它主要用于通过避免多次调用read()
和write()
方法来加速I / O并节省系统资源。建议您在几乎所有类型的I / O交互中使用它。