樓主的代碼在打開文本文件之后,是一個一個字符讀取內(nèi)容到緩沖區(qū)a中的,也就是說a中存放的是一個一個的字符,而不是數(shù)值。建議樓主讀取文件時使用如下指令(前提是文件1.txt中第一個字符為2):
寶清網(wǎng)站制作公司哪家好,找成都創(chuàng)新互聯(lián)公司!從網(wǎng)頁設(shè)計(jì)、網(wǎng)站建設(shè)、微信開發(fā)、APP開發(fā)、響應(yīng)式網(wǎng)站設(shè)計(jì)等網(wǎng)站項(xiàng)目制作,到程序開發(fā),運(yùn)營維護(hù)。成都創(chuàng)新互聯(lián)公司成立與2013年到現(xiàn)在10年的時間,我們擁有了豐富的建站經(jīng)驗(yàn)和運(yùn)維經(jīng)驗(yàn),來保證我們的工作的順利進(jìn)行。專注于網(wǎng)站建設(shè)就選成都創(chuàng)新互聯(lián)公司。
char b;
read(hdrfp, b, sizeof(char));
printf("%d", b); // 輸出2
另外,建議在指令
printf("error!\n");
后面添加一行
exit(1);
才能真正表示打開文件失敗后退出程序運(yùn)行。
深度解析:J2EE vs .NET開發(fā)平臺
看到這個標(biāo)題,也許會有人表示疑惑,J2EE和.NET并不在一個層次上,怎么能將它們放在一起呢?需要指出的是,通常所說的.NET包含了一個相當(dāng)廣泛的產(chǎn)品家族,包括開發(fā)平臺、操作系統(tǒng)、服務(wù)器、終端設(shè)備等,此外還包括服務(wù)平臺。開發(fā)平臺只是整個.NET戰(zhàn)略中的一部分,所以確切地說,放在這里的.NET應(yīng)該算是.NET開發(fā)平臺。
隨著三層/多層企業(yè)信息系統(tǒng)結(jié)構(gòu)的深度發(fā)展和下一代分布式計(jì)算模型Web 服務(wù)的出現(xiàn),企業(yè)應(yīng)用中關(guān)于平臺、框架、語言的競爭也愈演愈烈。J2EE平臺在過去幾年里一直引領(lǐng)著企業(yè)應(yīng)用的潮流,但最近微軟強(qiáng)力推出的.NET平臺也開始吸引著眾多IT企業(yè)和開發(fā)人員的注意力,向J2EE平臺提出了強(qiáng)有力的挑戰(zhàn)。企業(yè)應(yīng)用領(lǐng)域的技術(shù)對抗也因此拉開了架勢。
需要強(qiáng)調(diào)的是,.NET是戰(zhàn)略產(chǎn)品,而J2EE是描述產(chǎn)品的標(biāo)準(zhǔn),現(xiàn)在有很多符合J2EE標(biāo)準(zhǔn)的產(chǎn)品。在可以預(yù)見的未來,它們都將是構(gòu)建企業(yè)信息系統(tǒng)應(yīng)用的基礎(chǔ)性平臺,尤其是開發(fā)和部署Web服務(wù)的重要平臺。
盡管可以同時使用幾種系統(tǒng)平臺和語言,但對于企業(yè)來說,還需要選擇一個戰(zhàn)略性的平臺來實(shí)現(xiàn)數(shù)據(jù)的無縫集成,加速企業(yè)應(yīng)用的部署。而要做出正確的選擇,首先需要充分了解兩個平臺的特點(diǎn)和優(yōu)勢。本期專題將為您細(xì)說J2EE和.NET。
一、群力所至的J2EE
二、.NET開發(fā)平臺留住Windows開發(fā)者
三、 J2EE與.NET平臺體系架構(gòu)的異同
四、 J2EE vs .NET:Web服務(wù)誰主沉浮?
一、群力所至的J2EE
中南大學(xué) 羅新星 畢文杰
企業(yè)應(yīng)用系統(tǒng)的開發(fā)一直面臨著重大挑戰(zhàn):一方面,企業(yè)應(yīng)用系統(tǒng)面對的是一個異構(gòu)的分布式環(huán)境,它必須支持與已有系統(tǒng)的集成性和與其他系統(tǒng)的互操作性;另一方面,作為為客戶、合作伙伴和企業(yè)內(nèi)部提供信息服務(wù)的平臺,企業(yè)系統(tǒng)還必須具有高可用性、安全性、可靠性和可伸縮性。這些要求再加上復(fù)雜多變的用戶需求和不斷伸縮的交付時間,使得企業(yè)系統(tǒng)的開發(fā)越來越困難。開發(fā)商和廣大程序員一直在努力推動和殷切期待一個成熟、標(biāo)準(zhǔn)的企業(yè)平臺來簡化和規(guī)范企業(yè)系統(tǒng)的開發(fā)和部署。Java技術(shù)的出現(xiàn),尤其是J2EE(Java 2 Platform Enterprise Edition)平臺的推出正是這種努力的結(jié)果,也使得企業(yè)系統(tǒng)的開發(fā)由此變得更加快速和方便。需要指出的是,J2EE本身是一個標(biāo)準(zhǔn),它為不同廠商創(chuàng)建平臺產(chǎn)品提供了標(biāo)準(zhǔn),使不同J2EE平臺產(chǎn)品之間的交互成為可能。
J2EE旅程
Java于1996年由Sun公司推出,當(dāng)時它的主要用途是制作產(chǎn)生動態(tài)網(wǎng)頁的Applet。后來,人們發(fā)現(xiàn)Java的“一次開發(fā),多次運(yùn)行”、純面向?qū)ο蟮奶匦浴⒗厥諜C(jī)制和內(nèi)置的安全特別適合于開發(fā)企業(yè)應(yīng)用系統(tǒng)。于是,企業(yè)應(yīng)用開發(fā)商紛紛在Java標(biāo)準(zhǔn)版的基礎(chǔ)上各自擴(kuò)展出許多企業(yè)應(yīng)用API,其結(jié)果導(dǎo)致基于Java的企業(yè)應(yīng)用呈爆炸式增長。但是各企業(yè)系統(tǒng)API之間又不能相互兼容,破壞了Java的平臺獨(dú)立性。鑒于此,Sun公司聯(lián)合IBM、Oracle、BEA等大型企業(yè)應(yīng)用系統(tǒng)開發(fā)商于1998年共同制訂了一個基于Java組件技術(shù)的企業(yè)應(yīng)用系統(tǒng)開發(fā)規(guī)范,該規(guī)范定義了一個多層企業(yè)信息系統(tǒng)的標(biāo)準(zhǔn)平臺,旨在簡化和規(guī)范企業(yè)應(yīng)用系統(tǒng)的開發(fā)和部署。這一規(guī)范和其定義的平臺就構(gòu)成了J2EE。目前J2EE的最新版本是J2EE 1.3。需要注意的是,J2EE本身是一個標(biāo)準(zhǔn),而不是一個現(xiàn)成的產(chǎn)品(雖然現(xiàn)在有很多符合J2EE標(biāo)準(zhǔn)的產(chǎn)品),它由以下幾個部分組成:
J2EE規(guī)范。該規(guī)范定義了J2EE平臺的體系結(jié)構(gòu)、平臺角色及J2EE中每種服務(wù)和核心API的實(shí)現(xiàn)要求。它是J2EE應(yīng)用服務(wù)器開發(fā)商的大綱。
J2EE兼容性測試站點(diǎn)。Sun公司提供的一個測試J2EE應(yīng)用服務(wù)器是否符合J2EE規(guī)范的站點(diǎn),對通過該站點(diǎn)測試的產(chǎn)品,Sun公司將發(fā)放兼容性證書。
J2EE參考實(shí)現(xiàn)。即J2EE SDK,它既是Sun公司自己對J2EE規(guī)范的一個非商業(yè)性實(shí)現(xiàn),又是為開發(fā)基于J2EE企業(yè)級應(yīng)用系統(tǒng)原型提供的一個免費(fèi)的底層開發(fā)環(huán)境。
J2EE實(shí)施指南。即BluePrints文檔,該文檔通過實(shí)例來指導(dǎo)開發(fā)人員如何去開發(fā)一個基于J2EE的多層企業(yè)應(yīng)用系統(tǒng)。
組件-容器 搭建體系架構(gòu)
J2EE規(guī)范定義了一個基于組件的多層企業(yè)應(yīng)用系統(tǒng)開發(fā)平臺,其邏輯結(jié)構(gòu)如圖1所示。圖中的橢圓形表示組件,大矩形表示容器,包含向下文字的小矩形表示API,箭頭表示訪問,箭頭線上的文字表示相應(yīng)的協(xié)議。
J2EE是一個基于組件-容器模型的系統(tǒng)平臺,其核心概念是容器。容器是指為特定組件提供服務(wù)的一個標(biāo)準(zhǔn)化的運(yùn)行時環(huán)境,Java虛擬機(jī)就是一個典型的容器。組件是一個可以部署的程序單元,它以某種方式運(yùn)行在容器中,容器封裝了J2EE底層的API,為組件提供事務(wù)處理、數(shù)據(jù)訪問、安全性、持久性等服務(wù)。在J2EE中組件和組件之間并不直接訪問,而是通過容器提供的協(xié)議和方法來相互調(diào)用。組件和容器間的關(guān)系通過“協(xié)議”來定義。容器的底層是J2EE服務(wù)器,它為容器提供J2EE中定義的各種服務(wù)和API。一個J2EE服務(wù)器(也叫J2EE應(yīng)用服務(wù)器)可以支持一種或多種容器。在圖1中,你可能已經(jīng)注意到每個容器的服務(wù)包括兩部分:J2SE(Java 2 Platform Standard Edition)和一組擴(kuò)展的服務(wù)。這是因?yàn)镴2EE是以Java標(biāo)準(zhǔn)版為基礎(chǔ)的,各容器在J2SE之上再根據(jù)需要提供一些擴(kuò)展的服務(wù),如目錄服務(wù)、事務(wù)管理、數(shù)據(jù)訪問、消息機(jī)制、安全性等。
J2ee的核心——EJB
J2EE定義了四種組件:Applet組件、Application客戶組件、Web組件及EJB(Enterprise JavaBeans)組件。其中Applet和Application客戶組件在客戶端運(yùn)行,J2EE通過Java插件為Applet提供運(yùn)行環(huán)境,Application客戶的容器就是本地Java虛擬機(jī)。Web及EJB組件在服務(wù)端運(yùn)行。J2EE中包含兩種Web組件:JSP和Servlet。它們是Web服務(wù)器的功能擴(kuò)展,都能生成動態(tài)Web頁面。不同的是JSP是將Java代碼嵌入到HTML中,服務(wù)器負(fù)責(zé)解釋執(zhí)行,生成結(jié)果返回用戶(與ASP技術(shù)相似)。而Servlet是單獨(dú)的Java類,它動態(tài)生成HTML文件返回給客戶。Web組件的容器比較典型的就是基于Java的Web服務(wù)器。
EJB是J2EE平臺的核心,也是J2EE得到業(yè)界廣泛關(guān)注和支持的主要原因。我們知道,J2EE的一個主要目的就是簡化企業(yè)應(yīng)用系統(tǒng)的開發(fā),使程序員將主要精力放在商業(yè)邏輯的開發(fā)上。EJB正是基于這種思想的服務(wù)器端技術(shù),它本身也是一種規(guī)范,該規(guī)范定義了一個可重用的組件框架來實(shí)現(xiàn)分布式的、面向?qū)ο蟮纳虡I(yè)邏輯。EJB的核心思想是將商業(yè)邏輯與底層的系統(tǒng)邏輯分開,使開發(fā)者只需關(guān)心商業(yè)邏輯,而由EJB容器實(shí)現(xiàn)目錄服務(wù)、事務(wù)處理、持久性、安全性等底層系統(tǒng)邏輯。
一個可部署的EJB組件包含3個部分:
Remote 接口 Remote接口定義EJB組件中提供的可供用戶調(diào)用的方法,也就是通常所說的實(shí)現(xiàn)商業(yè)邏輯的函數(shù)或過程(如計(jì)算商品價格的函數(shù)),以供遠(yuǎn)程客戶端調(diào)用。在EJB組件部署到容器的時候,容器會自動生成Remote接口相應(yīng)的實(shí)例,即EJB對象,它負(fù)責(zé)代理用戶的調(diào)用請求。
Home接口 Home接口定義一組方法來創(chuàng)建新的EJB對象,查找、定位和清除已有的EJB對象。在EJB組件部署時容器也會自動生成相應(yīng)的Home對象,該對象負(fù)責(zé)查找和創(chuàng)建EJB對象,返回EJB對象的引用給客戶;用戶利用該引用調(diào)用EJB組件的方法,得到結(jié)果;最后Home對象清除EJB對象。我們可以形象地稱Home接口為EJB對象的工廠。
Enterprise Beans類 Enterprise Beans類是商業(yè)邏輯的具體實(shí)現(xiàn)類。其可供用戶調(diào)用的方法在Remote接口中定義。根據(jù)功能不同,EJB 2.0規(guī)范中定義了三種Enterprise Beans:會話Beans(Session Beans)、實(shí)體Beans(Entity Beans)和消息驅(qū)動Beans(Message-driven Beans)。
會話Beans分無狀態(tài)和有狀態(tài)兩種。一般無狀態(tài)的會話Beans模擬商業(yè)邏輯,比如計(jì)算價格等。有狀態(tài)的會話Beans通常模擬一個客戶會話,它會臨時保存客戶信息,根據(jù)客戶要求調(diào)用其他Beans來存取數(shù)據(jù)。兩種會話Beans都不保存狀態(tài)信息或數(shù)據(jù),當(dāng)客戶斷開連接或服務(wù)器關(guān)閉時,會話Beans也隨之消失。一個會話Beans的典型例子是網(wǎng)站上的購物車。
實(shí)體Beans模擬商業(yè)數(shù)據(jù),它表示一個數(shù)據(jù)存儲,可以是狀態(tài)信息或數(shù)據(jù)庫中的一條紀(jì)錄。實(shí)體Beans在客戶斷開連接或服務(wù)器關(guān)閉后,仍有服務(wù)保證其數(shù)據(jù)得以保存。一個實(shí)體Beans的典型例子就是客戶賬號信息。
消息驅(qū)動Beans在行為上很像會話Beans。不同的是僅在需要向這些Beans發(fā)送消息時才調(diào)用消息驅(qū)動Beans,比如在需要的時候發(fā)送用戶確認(rèn)信息等。
另外,在提交和部署EJB組件時,還需要兩個文件:部署描述文件,容器根據(jù)該文件來部署Enterprise Beans,提供所要求的服務(wù);EJB jar文件,它是提交給EJB容器的一個部署單元,容器(應(yīng)用服務(wù)器)在部署時解開它,裝入Enterprise Beans。
EJB容器非常復(fù)雜,一般由專業(yè)的J2EE應(yīng)用服務(wù)器開發(fā)商提供,比較流行的EJB容器由IBM的WebShpere、BEA公司的WebLogic Server、Sun公司的iPlant等應(yīng)用服務(wù)器提供。EJB容器除了為EJB提供事務(wù)處理、目錄服務(wù)、持久性管理和安全性服務(wù)外,還負(fù)責(zé)EJB的部署、發(fā)布和生命周期管理。
平臺標(biāo)準(zhǔn)服務(wù)
服務(wù)是組件和容器之間,以及容器和J2EE服務(wù)器之間的接口,在實(shí)現(xiàn)層面上它就是一系列API和協(xié)議。J2EE平臺定義了一組標(biāo)準(zhǔn)的服務(wù),其中有些服務(wù)是由J2SE提供的,有些則是J2EE對Java的擴(kuò)展。
目錄服務(wù) JNDI(Java Name and Directory) API為應(yīng)用程序提供了一個統(tǒng)一的接口來完成標(biāo)準(zhǔn)的目錄操作,由于JNDI是獨(dú)立于目錄協(xié)議的,應(yīng)用程序可以用它訪問各種目錄服務(wù),如LDAP、NDS、DNS等。
數(shù)據(jù)訪問 JDBC(Java Database Connectivity) API為訪問不同類型的數(shù)據(jù)庫提供了統(tǒng)一的途徑,屏蔽了不同數(shù)據(jù)庫的細(xì)節(jié),具有平臺無關(guān)性。J2EE平臺除了要求核心的JDBC API(包含在J2SE中)外,還要求擴(kuò)展的JDBC API 2.0,它支持行集、連接池和分布式的事務(wù)處理。
事務(wù)處理 JTA(Java Transaction Architecture)定義了一組標(biāo)準(zhǔn)的接口,為應(yīng)用系統(tǒng)提供可靠的事務(wù)處理支持。JTS(Java Transaction Service)是CORBA OTS事務(wù)監(jiān)控的Java實(shí)現(xiàn)。JTS規(guī)定了事務(wù)管理器的實(shí)現(xiàn)方式,該事務(wù)管理器在高層支持JTA標(biāo)準(zhǔn),在底層實(shí)現(xiàn)了OMG OTS規(guī)范的Java映射。
消息服務(wù) JMS(Java Message Service)是一組用于和面向消息的中間件相互通信的API。
它既支持點(diǎn)對點(diǎn)的消息通信,也支持發(fā)布/訂閱式的消息通信。 電子郵件 JavaMail API允許在應(yīng)用程序中以獨(dú)立于平臺、獨(dú)立于協(xié)議的方式收發(fā)電子郵件。JAF(JavaBeans Activation Framework)負(fù)責(zé)處理MIME編碼,JavaMail利用JAF來處理MIME編碼的郵件附件。
CORBA兼容接口 RMI(遠(yuǎn)程方法調(diào)用)是在分布式對象間通信的Java本地方法,它使應(yīng)用程序調(diào)用遠(yuǎn)程方法像調(diào)用本地方法一樣,不需要考慮所調(diào)用對象的位置。RMI-IIOP是RMI的擴(kuò)展,是符合CORBA標(biāo)準(zhǔn)的對象通信協(xié)議,也是J2EE默認(rèn)的組件通信協(xié)議。Java IDL允許J2EE應(yīng)用組件通過IIOP協(xié)議訪問外部的CORBA對象。
安全服務(wù) JAAS(Java Authentication and Authorization Service)用兩個步驟實(shí)現(xiàn)安全性:認(rèn)證,即由用戶提供認(rèn)證信息(如用戶名和密碼)來獲得系統(tǒng)認(rèn)證,這一過程又稱之為登錄;授權(quán),在被確認(rèn)為合法用戶后,系統(tǒng)根據(jù)用戶的角色授予其相應(yīng)的權(quán)限。J2EE的授權(quán)是基于安全角色的概念,一個安全角色是一個擁有相同權(quán)限的邏輯組。J2EE的安全角色由應(yīng)用組件提供商來定義。
Web服務(wù)支持 目前J2EE還不提供對Web服務(wù)的支持。Sun提供了一套API及其實(shí)現(xiàn)WSDP作為對J2EE的擴(kuò)展,但目前還不是J2EE規(guī)范的內(nèi)容。在WSDP中,JAXP用來解析XML文檔;JAXR向UDDI服務(wù)器注冊Web Services;JTX/RPC用基于XML的協(xié)議(如SOAP)來發(fā)送和接收XML文檔;JWSDL處理WSDL文檔。雖然J2EE不是為Web服務(wù)而生,但它現(xiàn)在正在努力追趕Web服務(wù)的腳步。
多層應(yīng)用模型
從應(yīng)用的角度來看,J2EE為企業(yè)應(yīng)用系統(tǒng)的開發(fā)提供了一種多層分布式企業(yè)應(yīng)用模型。在J2EE中,應(yīng)用邏輯按功能不同可以劃分為不同類型的組件,各組件根據(jù)它們所在的層分布在不同的機(jī)器上,共同組成一個基于組件的分布式系統(tǒng)。
J2EE定義了一個典型的四層結(jié)構(gòu),分別是客戶層、Web層、商業(yè)邏輯層和企業(yè)信息系統(tǒng)層。
在應(yīng)用開發(fā)時,J2EE定義的四層模型可根據(jù)實(shí)際情況靈活運(yùn)用。由于除了Applet外其他的組件都可以訪問數(shù)據(jù)庫、EJB組件和企業(yè)信息系統(tǒng),所以通過不同層的取舍及組合,可以衍生出許多應(yīng)用軟件開發(fā)模型,如基于Web的四層模型、基于桌面應(yīng)用的三層模型(不包括Web層)、B2B模型(不包括客戶層)等。如果應(yīng)用系統(tǒng)比較簡單,一般不用EJB作為邏輯層,而直接用Web組件來實(shí)現(xiàn)商業(yè)邏輯和數(shù)據(jù)訪問,畢竟EJB的開發(fā)和部署費(fèi)用還相當(dāng)高。
二、.NET開發(fā)平臺留住Windows開發(fā)者
南京郵電學(xué)院 李建忠
.NET開發(fā)平臺一推出,就開始了與J2EE平臺的競爭。它的絕大部分是微軟Windows DNA(Distributed Network Architecture)的重寫,DNA是微軟以前開發(fā)企業(yè)應(yīng)用程序的平臺。Windows DNA中包括了許多已經(jīng)被證實(shí)的技術(shù),新的.NET框架取代了這些技術(shù),并包含了Web服務(wù)層和改良的語言支持。從戰(zhàn)略角度看,.NET開發(fā)平臺擔(dān)負(fù)著整合.NET戰(zhàn)略的重任,但它最直接的目標(biāo)則是努力為微軟保留住龐大的Windows用戶基礎(chǔ)。
微軟的Windows開發(fā)用戶群是微軟通過Windows操作系統(tǒng)獲得的最大財(cái)富。對于為什么要推出.NET開發(fā)平臺,微軟表示,主要原因之一就是由于Java向開發(fā)者承諾的硬件和操作系統(tǒng)無關(guān)性,可能會導(dǎo)致這些用戶轉(zhuǎn)向其他平臺。雖然開發(fā)平臺本身不會給微軟帶來很多收益,但Windows程序員是企業(yè)內(nèi)部對微軟產(chǎn)品的主要支持力量,商用軟件的開發(fā)者形成了向客戶銷售微軟產(chǎn)品的重要渠道。如果微軟可以讓開發(fā)者在.NET開發(fā)平臺上編寫應(yīng)用程序,那么就會有更多的公司購買微軟的其他產(chǎn)品。
認(rèn)識.NET
認(rèn)識.NET最好的方法是看它做什么。.NET戰(zhàn)略將互聯(lián)網(wǎng)本身作為構(gòu)建新一代操作系統(tǒng)的基礎(chǔ),并對互聯(lián)網(wǎng)和操作系統(tǒng)的設(shè)計(jì)思想進(jìn)行合理延伸,使開發(fā)人員能夠創(chuàng)建出與設(shè)備無關(guān)的應(yīng)用程序,以便輕松實(shí)現(xiàn)互聯(lián)網(wǎng)連接。.NET包括一個相當(dāng)廣泛的產(chǎn)品家族,它們構(gòu)建于XML和互聯(lián)網(wǎng)產(chǎn)業(yè)標(biāo)準(zhǔn)之上,為用戶提供Web服務(wù)的開發(fā)、管理、應(yīng)用和體驗(yàn)。圖1是對.NET戰(zhàn)略的總體描述。組成.NET戰(zhàn)略的五個方面包括:
.NET開發(fā)平臺 這是一組用于建立Web服務(wù)應(yīng)用程序和Windows桌面應(yīng)用程序的軟件組件,包括 .NET Framework(框架)、.NET開發(fā)者工具和ASP.NET。于今年3月發(fā)布的Visual Studio .NET將是RAD開發(fā)工具中一個重要的產(chǎn)品。
.NET服務(wù)器 能夠提供廣泛聚合和集成Web服務(wù)的服務(wù)器是搭建.NET平臺的后端基礎(chǔ)。 .NET基礎(chǔ)服務(wù) 密碼認(rèn)證、日歷、文件存儲、用戶信息等基礎(chǔ)服務(wù)是必不可少的。微軟正在著力建設(shè)的.NET My Services等基礎(chǔ)性服務(wù)平臺是這方面可以借鑒的例子。
.NET終端設(shè)備 廣泛的連接互聯(lián)網(wǎng)并體驗(yàn)Web服務(wù)的終端設(shè)備是實(shí)現(xiàn).NET的前端基礎(chǔ)。PC、PDA以及各種嵌入式設(shè)備將在這個廣闊的天地里發(fā)揮作用。
.NET用戶體驗(yàn) 能夠滿足人們各種各樣需求的用戶體驗(yàn)是.NET的最終目標(biāo),也是.NET的價值實(shí)現(xiàn)。
在這五個組成部分當(dāng)中,.NET開發(fā)平臺中的 .net框架是.NET軟件構(gòu)造中最具挑戰(zhàn)性的部分,其他四個部分則緊緊圍繞.NET框架來進(jìn)行組織整合。
.NET 框架內(nèi)核
.NET框架實(shí)現(xiàn)了語言開發(fā)、代碼編譯、組件配置、程序運(yùn)行、對象交互等各個層面的功能,為Web服務(wù)及普通應(yīng)用程序提供了一個托管、安全、高效的執(zhí)行環(huán)境。所有在.NET平臺上創(chuàng)建的應(yīng)用程序運(yùn)行都需要兩個核心模塊:Common Language Runtime(CLR,通用語言運(yùn)行時)和.NET Framework類庫。CLR是一個軟件引擎,用來加載應(yīng)用程序,確認(rèn)它們可以沒有錯誤地運(yùn)行,并進(jìn)行相應(yīng)的安全許可驗(yàn)證,執(zhí)行應(yīng)用程序,然后將被清除。
.NET Framework類庫則向程序員提供軟件組件,來編寫在CLR的控制下運(yùn)行的代碼,它們按照單一有序的分級組織提供了一個龐大的功能集,包括從文件系統(tǒng)到對XML功能的網(wǎng)訪問的每一樣功能。該類庫為開發(fā)提供了三種基本編程模板:基于ASP.NET的Web表單應(yīng)用、基于ASP.NET的Web服務(wù)應(yīng)用和基于傳統(tǒng)GUI交互的Windows應(yīng)用。
CLR——.NET的虛擬機(jī)
CLR為.NET應(yīng)用程序提供了一個托管的代碼執(zhí)行環(huán)境。托管意味著將原來由程序員或操作系統(tǒng)做的工作剝離出來交由CLR來完成,從而使程序運(yùn)行獲得更高的安全性和穩(wěn)定性。這些工作包括內(nèi)存管理、即時編譯、組件自描述、安全管理和代碼驗(yàn)證,以及其他一些系統(tǒng)服務(wù)。CLR提供一個技術(shù)規(guī)范,無論程序使用什么語言編寫,只要能編譯成中間語言,就可以在它的支持下運(yùn)行,這樣.NET應(yīng)用程序就可以獨(dú)立于語言。CLR還在應(yīng)用程序運(yùn)行環(huán)境中為基于組件的編程提供了直接支持,比如它支持屬性、事件、對象、繼承性、多態(tài)性、接口等組件編程特性。
CLR中的自動垃圾收集器負(fù)責(zé).NET應(yīng)用程序運(yùn)行時的內(nèi)存分配、對象布局、內(nèi)存釋放等內(nèi)存管理問題,徹底解決了多年來困擾程序員的內(nèi)存泄漏問題,大大增強(qiáng)了應(yīng)用程序的健壯性。
即時編譯器在運(yùn)行時將中間語言以調(diào)用的對象方法為單位動態(tài)編譯成本地二進(jìn)制代碼。
中間語言是在.NET平臺下編譯器輸出PE文件(Windows可執(zhí)行文件)的語言,它為.NET平臺提供了多語言支持,允許開發(fā)者使用20多種不同的編程語言。而元數(shù)據(jù)是一個內(nèi)嵌于PE文件的表的集合,描述了代碼中數(shù)據(jù)類型等在代碼執(zhí)行時CLR需要知道的信息。元數(shù)據(jù)使得.NET應(yīng)用程序代碼具備自描述特性,提供了類型安全保障,而這在以前需要額外的類型庫或接口定義語言(IDL)。
CLR根據(jù)托管組件的來源(如互聯(lián)網(wǎng)、企業(yè)局域網(wǎng)、本地機(jī)器)等因素確定各組件的信任度,并根據(jù)信任度來限定它們執(zhí)行諸如讀取文件、修改注冊表等敏感操作的權(quán)限。此外,CLR借助通用類型系統(tǒng)對代碼類型進(jìn)行嚴(yán)格的安全檢查,可以避免不同組件之間可能存在的類型不匹配問題。通過代碼訪問安全機(jī)制,開發(fā)人員可以為應(yīng)用程序指定完成工作所必需的權(quán)限。CLR不僅規(guī)定了代碼訪問安全,還規(guī)定了基于角色的安全。基于角色的認(rèn)證為互聯(lián)網(wǎng)上分布式組件的執(zhí)行提供了安全保證。
值得指出的是,CLR通常寄宿在其他高性能服務(wù)器的應(yīng)用程序中,比如互聯(lián)網(wǎng)信息服務(wù)器(IIS)、SQL Server數(shù)據(jù)庫服務(wù)器等。這樣,開發(fā)者可以充分利用CLR諸多安全、高效的優(yōu)點(diǎn)來部署自己的商業(yè)邏輯。
類庫——組件和服務(wù)的家園
.NET Framework類庫由一組廣泛的、面向?qū)ο蟮摹⒖杀婚_發(fā)者用于任何編程語言的可重用類集合組成。它提供了幾乎所有應(yīng)用程序都需要的公共代碼;在此之上是許多應(yīng)用程序模板,這些模板為開發(fā)網(wǎng)絡(luò)站點(diǎn)和網(wǎng)絡(luò)服務(wù)提供特定的高級組件和服務(wù),不管是傳統(tǒng)的命令行程序還是Windows圖形界面程序,亦或是面向下一代互聯(lián)網(wǎng)分布式計(jì)算平臺的ASP.NET或Web服務(wù)應(yīng)用。與在Windows和它的SDK中發(fā)送的代碼庫一樣,.NET框架類庫將程序員從繁重的編程細(xì)節(jié)中解放出來,而專注于程序的商業(yè)邏輯。它將核心Win32 API最常用的功能和外掛SDK的功能封裝到了一個統(tǒng)一的包中,并采用清晰而有條理的方式對類庫進(jìn)行分組和描述,這樣開發(fā)者就能夠更方便地找到其應(yīng)用程序所需要的大多數(shù)功能。下面是它所提供的一些核心服務(wù):
系統(tǒng)框架服務(wù)
服務(wù)框架包括一套開發(fā)人員希望在標(biāo)準(zhǔn)語言庫中存在的基類庫,如集合、輸入/輸出、字符串、數(shù)據(jù)等基類。基類庫還提供訪問操作系統(tǒng)服務(wù)的類,如圖畫、網(wǎng)絡(luò)、線程、加密等類型。此外,服務(wù)框架也包括數(shù)據(jù)訪問類庫以及開發(fā)工具。
ADO.NET組件
ADO.NET為基于網(wǎng)絡(luò)的、可擴(kuò)展的應(yīng)用程序和服務(wù)提供數(shù)據(jù)訪問服務(wù)。它不僅支持傳統(tǒng)的基于鏈接指針風(fēng)格的數(shù)據(jù)訪問,而且對于更適合于把數(shù)據(jù)返回到客戶端應(yīng)用程序的無鏈接數(shù)據(jù)模板,它也提供高性能的訪問支持。
XML數(shù)據(jù)組件
通過它開發(fā)人員可以對任何數(shù)據(jù)進(jìn)行XML轉(zhuǎn)換、傳輸和確認(rèn),所有數(shù)據(jù)都可以被看做是XML格式的。同時,系統(tǒng)也支持ADO.NET數(shù)據(jù)與XML數(shù)據(jù)之間的通用轉(zhuǎn)換。
Windows表單組件
Windows表單組件為開發(fā)人員提供了強(qiáng)大的Windows應(yīng)用程序模型和豐富的Windows用戶口,包括傳統(tǒng)的ActiveX控件和Windows XP的新界面,如透明的、分層的浮動窗口。對CLR的強(qiáng)大支持也是Windows表單組件令人興奮的地方之一。
ASP.NET應(yīng)用服務(wù)
ASP.NET的核心是其用于處理基于低級結(jié)構(gòu)HTTP請求的高性能的運(yùn)行語言,其編譯運(yùn)行的方式大大提高了它的性能。ASP.NET使用基于構(gòu)件的.NET框架配制模板,因此它獲得了諸如XCOPY配制、構(gòu)件并行配制、基于XML配制之類的優(yōu)點(diǎn)。它還支持應(yīng)用程序的實(shí)時更新,同時提供高速緩沖服務(wù),以改善性能。
ASP.NET Web表單
ASP.NET Web表單把VB表單高效率的優(yōu)點(diǎn)帶到了Web應(yīng)用程序的開發(fā)中。ASP.NET Web單支持傳統(tǒng)的將HTML內(nèi)容與腳本代碼混合的ASP語法,但是它提出了一種將應(yīng)用程序代碼和用戶接口內(nèi)容分離的、更加結(jié)構(gòu)化的方法。它提供一套映射傳統(tǒng)HTML用戶接口部件(包括列表框、文本框和按鈕)的ASP.NET Web表單控件和一套更加復(fù)雜的Web應(yīng)用控件(如日歷和廣告轉(zhuǎn)板)。
對于.NET和Java本質(zhì)區(qū)別最精辟的評述
java是平臺無關(guān)的語言, #e.O?e
.NET是語言無關(guān)的平臺。 U 1[
lTuVLQ*e
早說有報(bào)道 ?39aW4%g
java呈下面的三角型: 6 _^X@$IVD
java sBrpJc
unix linux windows... 'KxUv$5x
c c++ java vb C#... vtCd6cl=c
whidows be@})?gH
而oracle就這兩種都沒有,但有這兩者都沒有的數(shù)據(jù)庫平臺和sap。而甲骨文的最終幻想就是把這兩個三角型合起來成為一個矩形。 Ri/?Y6r63
個人看法:不過單純從語言以及sun和ms的基本語言庫來說,java已經(jīng)比不上.net了(以前是.net學(xué)java,現(xiàn)在是java學(xué).net)。java剩下的只是哪將近十年來的經(jīng)驗(yàn)積累 iHa)XtI
~+H)"e
由于M$自己也有數(shù)據(jù)庫系統(tǒng)軟件,Oracle的這個最終幻想可能還要長久的幻想下去,而且有無終點(diǎn)還很難說。 uAYFZ{%C$
再則M$的產(chǎn)品線的互補(bǔ)性已經(jīng)是很難撼動的了,Visual Studio、Windows、Office和Sql Server,太嚇人了@_@。 Z*6:;nzn
7$%'URFP]
net 是平臺壟斷 i }$soCE
java 是語言壟斷 nV%#lMQ G
2!myNh:zM
好像C++之父給個一個論斷:JVM本身就是一種平臺(大意)。 f950x3++L
SUN or M$都是要將開發(fā)者binding到自己的平臺上。 6H.2hWFm
不過不考慮技術(shù)本質(zhì),考慮現(xiàn)在的市場現(xiàn)象,這個論斷可以成立 0qwxi`i
,3XmL
.net 基本看一本書就夠了 而Java要看許多書 還不一定能干活 =#+0HLGCFA
`# .Q,V
.net就像品牌機(jī),什么東西都預(yù)先由M$裝好,但整體性能總是那么差強(qiáng)人意.JAVA更容易DIY,DIY就需要自看更多的書,當(dāng)然這是取舍問題.
在SD Times的一篇名為Java VS .NET?的文章中,作者提出了自己的觀點(diǎn),在企業(yè)的應(yīng)用中,Java并不會和.NET正面對抗,而更可能的是合作。Java和.NET各有特點(diǎn),各有優(yōu)勢:
1、 在智能客戶端領(lǐng)域,.NET絕對占有統(tǒng)治地位。
2、 Java在大規(guī)模的、跨平臺集成的服務(wù)端領(lǐng)域則有明顯優(yōu)勢。
3、 論及開發(fā)工具的功能性和易用性,則首推.NET
4、 而在安全性方面,基于Linux和Unit的Java要強(qiáng)于基于Wnidows的.NET。
文中還提到,雖然以上的對比是當(dāng)前的實(shí)情,但Java和.NET都在不斷的發(fā)展中,彼此之間的差距還在持續(xù)的縮小。兩個陣營都在相互學(xué)習(xí),彌補(bǔ)自身的不足,最后的兩個產(chǎn)品將會越來越相似。
.NET將開發(fā)工具的易用性發(fā)揮到了極致。但微軟走的是傻瓜型工具的路線,這一點(diǎn)為諸多優(yōu)秀程序員所不屑。但傻瓜型工具的特點(diǎn)會帶來生產(chǎn)力的突破,可以預(yù)言,在一些小型的企業(yè)中,將會在未來幾年更多的轉(zhuǎn)向.NET的方案。尤其是現(xiàn)在使用VB、PB、Delphi的各個企業(yè)。
開放源碼界給了Java很大的助力,而Java的很大一部分的魅力也是通過各個優(yōu)秀的開放源碼項(xiàng)目得到體現(xiàn)的。可能有一些企業(yè)并不關(guān)心開放源碼,但這個態(tài)度其實(shí)是有問題的。開發(fā)源碼的價值在于,他提供了一種生態(tài)環(huán)境:企業(yè)可以借助開源項(xiàng)目,在一個很高的起點(diǎn)上發(fā)展,然后再實(shí)現(xiàn)盈利的同時,反之回饋開源項(xiàng)目。在人的問題上,開源軟件鍛煉了大批優(yōu)秀的程序員,這批程序員不是依賴于某個公司提供的傻瓜型工具,而是靠自己,靠集體的智慧來提高勞動生產(chǎn)率。這種發(fā)展模式是和.NET的路線截然不同的。所以Java下有很多關(guān)于軟件管理、軟件建模方面的研究,而.NET這方面就差很多了。
而值得稱道的是,微軟做了一件非常聰明的事情-將CLR規(guī)范和C#規(guī)范提交給了ECMA組織,從而實(shí)現(xiàn)了.NET底層框架的標(biāo)準(zhǔn)化,這使得一些程序員開始將一些優(yōu)秀的開源項(xiàng)目轉(zhuǎn)移到.NET上來。而Mono項(xiàng)目的發(fā)展,也使得.NET真正實(shí)現(xiàn)了跨平臺的目標(biāo)。這樣,.NET就正式涉足到了Unit環(huán)境中。但微軟還有很長的路要走。
養(yǎng)成良好的習(xí)慣,每天查看下log的內(nèi)容,排除一些error和warning。 定期對log進(jìn)行歸檔和更新
如有疑問可追問,滿意請及時采納,謝謝
是別的分區(qū)吧?因?yàn)檎G闆r下這是不會發(fā)生的。也許你掛載了別的分區(qū)。
執(zhí)行df 和cat /etc/fstab貼出來看看?
在C語言中,或更精確地說成C標(biāo)準(zhǔn)函數(shù)庫中表示文件結(jié)束符(end of file)。在while循環(huán)中以EOF作為文件結(jié)束標(biāo)志,這種以EOF作為文件結(jié)束標(biāo)志的文件,必須是文本文件。在文本文件中,數(shù)據(jù)都是以字符的ASCII代碼值的形式存放。
一般EOF的值為-1,ASCII代碼值的范圍是0~255,不可能出現(xiàn)-1,因此可以用EOF作為文件結(jié)束標(biāo)志。
EOF在windows對應(yīng)的按鍵是CTRL+Z鍵,在linux系統(tǒng)上對應(yīng)的按鍵是CTRL+D。比如下面的代碼:
#include?stdio.h
int?main()
{
int?c;
while?((c?=?getchar())?!=?EOF)
putchar(c);
return?0;
}
?運(yùn)行程序按CTRL+Z鍵,即會顯示“^Z",再次按回車鍵即可退出程序。
?
分享題目:linux命令rfp,改變文件所有者的Linux命令
本文路徑:http://m.kartarina.com/article24/hegice.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站收錄、服務(wù)器托管、軟件開發(fā)、微信公眾號、建站公司、響應(yīng)式網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)