2013-07-14 46 views
1

我的朋友問了一個問題Java:爲什麼在Java中沒有clrscr? - 希望更多的澄清

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

通過這樣的用戶給出的答案是

John3136因爲Java是跨平臺的,可以不帶控制檯上運行時, clrscr的含義必須根據應用程序的運行方式和平臺而改變。

MVP:Java是設計爲寫/一次編譯,到處運行。這個功能不太適合這個議程。

我的問題是不是JVM處理的跨平臺差異? 請問如何像這樣的函數Thread.sleep()System.out.println()工作呢?它們也依賴於底層平臺,就像線程在Linux和Windows中的實現方式可能不同。

我主要關心的是如果像System.out.println()這樣的函數在不同的平臺上工作,那麼也可以爲不同的平臺實現clrscr。我有點懷疑約翰和mvp的回答

+0

Java的控制檯流媒體被認爲是非常慢的。控制檯應用程序並不是真正的焦點,所以設計師(以及大多數用戶)可能不認爲這是值得的努力,因爲它會需要很多nitpicky代碼...清除一個屏幕不僅取決於系統,而且還取決於您正在運行的控制檯。要做到這一點,需要做很多工作。 –

+0

@cHao:我知道我已經提到了同樣的問題。閱讀後 –

+0

你顯然從來沒有與數百種不同類型的終端戰鬥,每個終端都有自己的逃生代碼,這些代碼已經在幾十年中製造出來了,都是偶然過時的。 clrscr()只可能是因爲Windows DOS框服從ANSI控制代碼,或者因爲Unix'curses'庫的存在,NB需要用戶配置才能正確使用。 – EJP

回答

1

問題是clrscr的可靠實現需要庫方法來知道它連接到什麼類型的設備......以便它可以做適當的事情來清除屏幕。一個庫可能能夠知道如何在Windows上執行此操作,但無法在所有平臺上完成。

一般的理念是,如果某些功能無法在所有支持的平臺上實現,那麼標準Java類將不支持它。

但是,這並不意味着你不能實現自己的庫來自己做clrscr ...在想出瞭如何在對你很重要的所有平臺上完成它之後。或者你可以找到一個合適的第三方庫。你冒着使你的應用程序不可移植的風險,但這是你的擔心。

另一種解釋是Java SE庫不提供對老派終端/終端仿真器的任何支持。 (相當於舊的「termcap」庫)。爲什麼?因爲目前電腦和手機沒有圖形屏幕,所以幾乎沒有電話。 (我不記得我最後一次使用真正的24x80終端...但它可能是超過25年前)


我是有點懷疑的約翰和MVP的回答:

這是很難解決您的懷疑。也許這將說服你是讓你嘗試在廣泛的平臺和輸出設備來實現clrscr在Java中自己的嘛......

怎麼想Thread.sleep()方法和系統的功能。 out.println()工作呢?

所有操作系統(或至少所有能夠支持Java的)都爲本地API /庫提供了所需的功能。

  • Thread.sleep的情況下,JVM執行通常使用POSIX sleep(...)功能。

  • System.out.println的情況下,outPrintWriter和JVM創建連接到標準輸出裝置的PrintWriter。致電println最有可能導致致電POSIX write函數。

這不是clrscr的情況。 C標準庫不支持此功能。

+0

謝謝你解釋它..我會接受你的答案,並upvote assylias的答案,因爲他在說同樣的事情..我不想不公平:) –

1

System.out.println使用the standard output stream,它可以是控制檯或其他東西(比如說你的IDE的輸出窗口)。

控制檯本身可以通過System.console()進行訪問,如the documentation所指出的,可以返回null。在那種情況下,不清楚clrscr應該做什麼。

+0

因此當System.console返回null時,System.out.println()會做什麼? clrscr也可以做到這一點。 –

+1

System.out是一個printstream--例如,printstream可以封裝一個文件流。因此,如果以編程方式將system.out重新分配給文件以便記錄它,則System.out.println()將寫入文件,但clrscr會執行什麼操作?擦除你的日誌?將它作爲一個功能是沒有意義的。 –

0

正如您在引用的問題中提到的那樣,C不支持將clrscr作爲標準功能。由於控制檯正在清除,這意味着存在一個O.S.系統調用允許這樣做。假設並非所有的O.S.都實現了這個系統調用,那麼就不可能用Java實現它,或者實際上以任何其他語言實現它作爲標準特徵。