今天在做測(cè)試的時(shí)候發(fā)現(xiàn)為了醒目用System.err打出來(lái)的信息和普通的System.out打出來(lái)的信息的順序出乎我的意料之外,納悶之下google之。發(fā)現(xiàn)兩者還是很有區(qū)別的。。。
大多數(shù)操作系統(tǒng)都有三個(gè)標(biāo)準(zhǔn)文件描述符:標(biāo)準(zhǔn)輸入,標(biāo)準(zhǔn)輸出,標(biāo)準(zhǔn)出錯(cuò)。
三個(gè)操作系統(tǒng)的文件描述符映射到編程語(yǔ)言的標(biāo)準(zhǔn)庫(kù)中,往往加了一層包裝,但是名字通常還是叫標(biāo)準(zhǔn)輸入,標(biāo)準(zhǔn)輸出,標(biāo)準(zhǔn)出錯(cuò)。
在其它語(yǔ)言中的一般寫(xiě)法是:stdin,stdout,stderr(有的語(yǔ)言里大寫(xiě),有的語(yǔ)言里小寫(xiě))。對(duì)應(yīng)Java中的System.in,System.out,System.err。
在語(yǔ)言層面的實(shí)現(xiàn)三個(gè)文件描述符都是可以重定向的(只要你想)。但是一般而言,如果你在unix shell或windows command line中使用管道或重定向,則只是針對(duì)標(biāo)準(zhǔn)輸入和輸出。
另外,標(biāo)準(zhǔn)輸出和標(biāo)準(zhǔn)出錯(cuò)的一個(gè)區(qū)別是,標(biāo)準(zhǔn)輸出往往是帶緩存的,而標(biāo)準(zhǔn)出錯(cuò)沒(méi)有緩存(默認(rèn)設(shè)置,可以改)。所以如果你用標(biāo)準(zhǔn)出錯(cuò)打印出來(lái)的東西可以馬上顯示在屏幕,而標(biāo)準(zhǔn)輸出打印出來(lái)的東西可能要再積累幾個(gè)字符才能一起打印出來(lái)。如果你在應(yīng)用中混用標(biāo)準(zhǔn)輸出和標(biāo)準(zhǔn)出錯(cuò)就可能看到這個(gè)問(wèn)題。
總的來(lái)說(shuō),System.out用于正常的輸出,也就是程序真正想輸出的內(nèi)容。而System.err用于出錯(cuò)信息的輸出,也就是你本來(lái)不期待看到的東西。
因此,System.err打出來(lái)的信息常常會(huì)跑到System.out信息的前面去。。。
posted on 2007-09-12 10:40
teasp 閱讀(1364)
評(píng)論(4) 編輯 收藏 所屬分類(lèi):
Java學(xué)習(xí)