- 首頁|
- 網(wǎng)校|
- 焚題庫|
- APP |
-
微信公眾號(hào)
普通的程序交互方式有命令行和GUI形式。對(duì)于GUI樣式,交互的設(shè)計(jì)可以多種多樣,但是Java做命令行交互,似乎存在著一些不足。
命令行交互是傳統(tǒng)的交互方式,如果程序有時(shí)候需要在Unix或是Linux等系統(tǒng)上運(yùn)動(dòng)時(shí),以這種方式出現(xiàn)的可能性就比較大。命令行包括
輸入和回顯問題,一般是以行結(jié)束,或是以某個(gè)結(jié)束符為終命令終止標(biāo)識(shí)。System.out 和System.err就用于標(biāo)準(zhǔn)的輸出和錯(cuò)誤輸出,System.in用于標(biāo)準(zhǔn)的輸入接受,一般情況下都是指鍵盤。
如果接受參數(shù)輸入,一般的程序結(jié)構(gòu)如下:
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
System.out.println("==Please input password==:");
String pass = in.readLine(); 輸入的時(shí)候顯示屏自動(dòng)進(jìn)行輸入回顯。這個(gè)時(shí)候如果遇到輸入密碼等敏感數(shù)據(jù)的時(shí)候,就無法用*或是#這樣的符號(hào)進(jìn)行回顯屏蔽,容易暴露安全問題。
解決的可能想法:
1、通過監(jiān)聽鍵盤事件,對(duì)輸入的回顯進(jìn)行截獲取,把回顯進(jìn)行屏蔽,但是監(jiān)聽器如何知道何時(shí)是輸入密碼,何時(shí)是輸入普通數(shù)據(jù)?比較難以控制,而且這種監(jiān)聽?wèi)?yīng)該是線程化的,可能會(huì)存在一些意想不到的問題。
2、如果用純Java難以實(shí)現(xiàn),那么是否可以使用其它語言的功能進(jìn)行補(bǔ)充,比如JNI,或是Windows下面的Dos腳本,Linux平臺(tái)的Shell腳本來進(jìn)行補(bǔ)充。不過這樣就不太平臺(tái)無關(guān)了。
3、可能sun發(fā)現(xiàn)了這個(gè)不足之處,從1.6版本開始,增加了一個(gè)java.io.Console類,代表與當(dāng)前 Java 虛擬機(jī)關(guān)聯(lián)的基于字符的控制臺(tái)設(shè)備,這個(gè)Console是對(duì)原來System.in這種不足的補(bǔ)充,提供了像readPassword()等這樣的實(shí)用方法,具體請(qǐng)參考API文檔,就是專門用于對(duì)敏感信息的讀取。但是這是基于Java1.6的,如果有些場(chǎng)景受限制,不能使用1.6,那么還是無法解決上面的問題。后來查閱了一下Console類的實(shí)現(xiàn)方式,想直接把它的實(shí)現(xiàn)方式移植到1.4.xx上是比較難的,因?yàn)橛玫搅艘恍└甙姹镜男绿匦。使用Console要注意的是:虛擬機(jī)是否具有控制臺(tái)取決于底層平臺(tái),還取決于調(diào)用虛擬機(jī)的方式。如果虛擬機(jī)從一個(gè)交互式命令行開始啟動(dòng),且沒有重定向標(biāo)準(zhǔn)輸入和輸出流,那么其控制臺(tái)將存在,并且通常連接到鍵盤并從虛擬機(jī)啟動(dòng)的地方顯示。如果虛擬機(jī)是自動(dòng)啟動(dòng)的(例如,由后臺(tái)作業(yè)調(diào)度程序啟動(dòng)),那么它通常沒有控制臺(tái)。如果你在Eclipse里面啟動(dòng)程序調(diào)用Console,那么通常是沒有控制臺(tái),還是得從外部的命令行方式才能調(diào)用得到。
總體想一下,感覺應(yīng)該還是從第2點(diǎn)出發(fā),犧牲掉一點(diǎn)通用性,這樣才能滿足這種功能需求。
初級(jí)會(huì)計(jì)職稱中級(jí)會(huì)計(jì)職稱經(jīng)濟(jì)師注冊(cè)會(huì)計(jì)師證券從業(yè)銀行從業(yè)會(huì)計(jì)實(shí)操統(tǒng)計(jì)師審計(jì)師高級(jí)會(huì)計(jì)師基金從業(yè)資格稅務(wù)師資產(chǎn)評(píng)估師國(guó)際內(nèi)審師ACCA/CAT價(jià)格鑒證師統(tǒng)計(jì)資格從業(yè)
一級(jí)建造師二級(jí)建造師消防工程師造價(jià)工程師土建職稱房地產(chǎn)經(jīng)紀(jì)人公路檢測(cè)工程師建筑八大員注冊(cè)建筑師二級(jí)造價(jià)師監(jiān)理工程師咨詢工程師房地產(chǎn)估價(jià)師 城鄉(xiāng)規(guī)劃師結(jié)構(gòu)工程師巖土工程師安全工程師設(shè)備監(jiān)理師環(huán)境影響評(píng)價(jià)土地登記代理公路造價(jià)師公路監(jiān)理師化工工程師暖通工程師給排水工程師計(jì)量工程師
人力資源考試教師資格考試出版專業(yè)資格健康管理師導(dǎo)游考試社會(huì)工作者司法考試職稱計(jì)算機(jī)營(yíng)養(yǎng)師心理咨詢師育嬰師事業(yè)單位教師招聘公務(wù)員公選考試招警考試選調(diào)生村官
執(zhí)業(yè)藥師執(zhí)業(yè)醫(yī)師衛(wèi)生資格考試衛(wèi)生高級(jí)職稱護(hù)士資格證初級(jí)護(hù)師主管護(hù)師住院醫(yī)師臨床執(zhí)業(yè)醫(yī)師臨床助理醫(yī)師中醫(yī)執(zhí)業(yè)醫(yī)師中醫(yī)助理醫(yī)師中西醫(yī)醫(yī)師中西醫(yī)助理口腔執(zhí)業(yè)醫(yī)師口腔助理醫(yī)師公共衛(wèi)生醫(yī)師公衛(wèi)助理醫(yī)師實(shí)踐技能內(nèi)科主治醫(yī)師外科主治醫(yī)師中醫(yī)內(nèi)科主治兒科主治醫(yī)師婦產(chǎn)科醫(yī)師西藥士/師中藥士/師臨床檢驗(yàn)技師臨床醫(yī)學(xué)理論中醫(yī)理論