Java : why no clrscr in Java ? - 需要更多说明

标签 java cross-platform

我的 friend 问了一个问题

Why Java doesn't support function like clrscr in C?

SO用户给出的答案是

John3136:由于 Java 是跨平台的并且可以在没有控制台的情况下运行,因此 clrscr 的含义必须根据应用程序的运行方式和平台而变化。>

mvp: Java 被设计为一次编写/编译,随处运行。而且这个功能不太适合这个议程。

我的问题是跨平台差异不是由 JVM 处理的吗? 那么像 Thread.sleep()System.out.println() 这样的函数如何工作呢?它们还依赖于底层平台,比如 Linux 和 Windows 中线程的实现方式 [可能] 不同?

我主要关心的是如果像 System.out.println() 这样的函数可以在不同的平台上工作,那么也可以为不同的平台实现 clrscr 。我对约翰和 mvp 的回答有点怀疑

最佳答案

问题在于,clrscr 的可靠实现需要库方法知道它连接到哪种设备......以便它可以执行适当的操作来清除屏幕。库可能知道如何在 Windows 上执行此操作,但无法在所有平台上执行此操作。

一般的理念是,如果某些功能无法在所有支持的平台上实现,那么标准 Java 类将不支持它。

但是,这并不意味着您无法实现自己的库来自己执行clrscr...在弄清楚如何在对您重要的所有平台上执行此操作之后。或者您可以找到合适的第三方库。您可能会面临使应用程序变得不可移植的风险,但这是您所关心的。

另一个解释是 Java SE 库不为老式终端/终端仿真器提供任何支持。 (相当于旧的“termcap”库。)为什么?因为如今带有图形屏幕的电脑和手机已经很少需要它了。 (我不记得上次使用真正的 24x80 终端是什么时候了……但可能是超过 25 年前了!)

<小时/>

I am a little skeptical on John's and mvp's answer:

很难消除你的怀疑。也许唯一能让您信服的是您尝试自己在各种平台和输出设备上用 Java 实现 clrscr ...

How would a function like Thread.sleep() and System.out.println() work then?

所有操作系统(或至少所有能够支持 Java 的操作系统)都提供具有所需功能的 native API/库。

  • 对于 Thread.sleep,JVM 实现通常使用 POSIX sleep(...) 函数。

  • 对于 System.out.printlnout 是一个 PrintWriter,JVM 创建一个 PrintWriter 连接到标准输出设备。 println 调用很可能会导致调用 POSIX write 函数。

clrscr 的情况并非如此。 C 标准库不支持此功能。

关于Java : why no clrscr in Java ? - 需要更多说明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17636816/

相关文章:

java - 如何检查远程存储库中是否存在 Maven Artifact

c++ - OS X 相当于 OutputDebugString()?

c# - 在单声道中学习 C#

检查文件夹是否可写

Android/Windows 混合应用

java - Android AudioTrack 在某些设备上速度极慢

java - 如何在 macOS 上设置或更改默认 Java (JDK) 版本?

适用于桌面和移动设备的 C# 跨平台 GUI

java - 为什么 hibernate 不删除行?

java - MongoDB 3 Java检查集合是否存在