版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
Java網(wǎng)絡(luò)編程期末復(fù)習(xí)題(I/O、多線程、網(wǎng)絡(luò)編程、數(shù)據(jù)庫(kù)操作)
一、單選題
1、下列關(guān)于Java線程的說(shuō)法那些是正確的()
A、每一個(gè)Java線程可以看成由代碼、一個(gè)真實(shí)的CPU以與數(shù)據(jù)三部份
組成。
B、創(chuàng)建線程的兩種方法中,從Thread類中繼承的創(chuàng)建方式可以防止出
現(xiàn)多父類問(wèn)題。
C、Thread類屬于java.util程序包°
D、以上說(shuō)法無(wú)一正確。
2、運(yùn)行下列程序,會(huì)產(chǎn)生什么結(jié)果?()
publicclassXextendsThreadimplementsRunable{
publicvoidrun(){
System.out.println("thisisrun()");
}
publicstaticvoidmain(Stringargs[]){
Threadt=newThread(newX());
t.startQ;
)
)
A、第一行會(huì)產(chǎn)生編譯錯(cuò)誤
B、第六行會(huì)產(chǎn)生編譯借誤
C、第六行會(huì)產(chǎn)生運(yùn)行錯(cuò)誤
D、程序會(huì)運(yùn)行和啟動(dòng)
3、下列選項(xiàng)中,用于定義接口的關(guān)鍵字是()
A、import
B、implements
C、interface
D、protected
4.定義類頭時(shí)能運(yùn)用的修飾符是()o
A)privateB)staticC)abstractD)protected
5、下面哪個(gè)方法不行以在任何時(shí)候被任何線程調(diào)用?()
A、wait()
B>sleepO
C、yield()
D、synchronized(this)
6.下列關(guān)于線程優(yōu)先級(jí)的說(shuō)法中,正確的是
A)線程的優(yōu)先級(jí)是不能變更的
B)線程的優(yōu)先級(jí)是在創(chuàng)建線程時(shí)設(shè)置的
C)在創(chuàng)建線程后的任何時(shí)候都可以設(shè)置
D)B和C
7.線程生命周期中正確的狀態(tài)是
A)新建狀態(tài)、運(yùn)行狀態(tài)和終止?fàn)顟B(tài)
B)新建狀態(tài)、運(yùn)行狀態(tài)、堵塞狀態(tài)和終止?fàn)顟B(tài)
C)新建狀態(tài)、可運(yùn)行狀態(tài)、運(yùn)行狀態(tài)、堵塞狀態(tài)和終止?fàn)顟B(tài)
D)新建狀態(tài)、可運(yùn)行狀態(tài)、運(yùn)行狀態(tài)、復(fù)原狀態(tài)和終止?fàn)顟B(tài)
8.Thread類中能運(yùn)行線程體的方法是
A)start()B)resume()
C)init()D)run()
9在程序讀入字符文件時(shí),能夠以該文件作為干脆參數(shù)的類是
A)B)BufferedReader
C)D)ObjectinputStrearn
10)java.io包的File類是
A)字符流類B)字節(jié)流類
C)對(duì)象流類D)非流類
11)下列描述中,正確的是
A)在Serializable接口中定義了抽象方法
B)在Serializable接口中定義了常量
C)在Serializable接口中沒(méi)有定義抽象方法,也沒(méi)有定義常量
D)在Serializable接口中定義了成員方法
12.java中用于創(chuàng)建文件對(duì)象的類是()
A.FileB.ObjectC.ThreadD.Frame
13.從鍵盤上輸入一個(gè)字符串創(chuàng)建文件對(duì)象,若要推斷該文件對(duì)象為書目
文件或數(shù)據(jù)文件,可運(yùn)用下列哪個(gè)方法?()
A.getPath()B.getNameQC.isFileQD.isAbsolutef)
14.下列哪個(gè)類不對(duì)干脆創(chuàng)建對(duì)象?()
A,InputstreamB.C.BufferedlnputStreamD.
DatalnputStream
15.從鍵盤上輸入多個(gè)字符時(shí),為了避開(kāi)回車換行符的影響,須要運(yùn)用下
列哪個(gè)流方法?()
A.write()B.flushf)C.close()D.skip()
16.以對(duì)象為單位把某個(gè)對(duì)象寫入文件,則須要運(yùn)用什么方法?()
A.writelntf)BwriteObject()C.write()D.writUTFQ
17.下列哪個(gè)類的方法能夠干脆把簡(jiǎn)潔數(shù)據(jù)類型寫入文件?()
A?OutputstreamB.BufferedWriterC.
ObjectOutputStream.D.
18.若一個(gè)類對(duì)象能被整體寫入文件,則定義該類時(shí)必需實(shí)現(xiàn)下列哪個(gè)接
口?()
A.RunnableB.ActionListenerC.WindowsAdapterD.
Serializable
19.下列哪種類型的數(shù)據(jù)能以對(duì)象的形式寫入文件?()
A.StringB.FrameC.DialogD.Button
20.File類的方法中,用于列舉某書目下的子書目與文件的方法是()
A.longlengthQB.longlastModifiedf)C.String[]list()D.
StringgetNameQ
21.能夠以字符串為單位寫入文件數(shù)據(jù)的流類是()
A.B.C.BufferedWriterC.Outputstream
22.能夠向文件輸入邏輯型數(shù)據(jù)的類是:()
A.B.OutputstreamC.D.DataOutputStream
23.在線程同步中,為了喚醒另一個(gè)等待的線程,運(yùn)用下列方法()
A.sleepOB.wait()CnotifyOD.join()
24.為了得到當(dāng)前正在運(yùn)行的線程,可運(yùn)用下列哪個(gè)方法?()
A.getNameQB.Thread.CurrentThread().B.sleepOD.
mn()
25.以下()不屬于線程的狀態(tài)。
A.就緒狀態(tài)Bo運(yùn)行狀態(tài)Co掛起狀態(tài)Do獨(dú)占狀態(tài)
26.當(dāng)線程被創(chuàng)建后,其所處的狀態(tài)是()
A.堵塞狀態(tài)Bo運(yùn)行狀態(tài)C、就緒狀態(tài)D、新建狀態(tài)
27.當(dāng)線程調(diào)用start。后,其所處狀態(tài)為()
A.堵塞狀態(tài)Bo運(yùn)行狀態(tài)C、就緒狀態(tài)D、新建狀態(tài)
28.Thread.sleep()方法調(diào)用后,當(dāng)?shù)却龝r(shí)間未到,該線程所處狀態(tài)
為()
A.堵塞狀態(tài)Bo運(yùn)行狀態(tài)C、就緒狀態(tài)D、新建狀態(tài)
29.新生狀態(tài)的線程其可能干脆進(jìn)入的狀態(tài)是()
A.堵塞狀態(tài)B、運(yùn)行狀態(tài)C、新建狀態(tài)D、結(jié)束狀態(tài)
30.Thread.sleep()方法調(diào)用后,當(dāng)?shù)却龝r(shí)間已到,該線程所處狀態(tài)
為()
A.堵塞狀態(tài)Bo運(yùn)行狀態(tài)C、就緒狀態(tài)D、新建狀態(tài)
31.當(dāng)線程因異樣而退出run。后,其所處狀態(tài)為()
A.堵塞狀態(tài)Bo運(yùn)行狀態(tài)C、就緒狀態(tài)D、結(jié)束狀態(tài)
32.wait。方法首先是哪個(gè)類的方法?()
A.ObjectB.Thread.C.RunnableD.File
33.假如我們想實(shí)現(xiàn)“先把要寫入文件的數(shù)據(jù)先緩存到內(nèi)存中,再把緩
存中的數(shù)據(jù)寫入文件中”的功能時(shí),則須要運(yùn)用下列哪個(gè)類?()
A.B.OutputStreamC.FilterOutputStreamD.
DataOutputStream
34.用read。方法讀取文件內(nèi)容時(shí),推斷文件結(jié)束的標(biāo)記為()
A.0B.1C-1D.無(wú)標(biāo)記
35.以下哪個(gè)方法只對(duì)運(yùn)用了緩沖的流類起作用?()
A.read()B.write()Cskip()D.flushQ
36.Java供應(yīng)的類InetAddress來(lái)進(jìn)行有關(guān)Internet地址的操作.()
A.SocketB.ServerSocketC.DatagramSocketD
InetAddress
37.InetAddress類中哪個(gè)方法可實(shí)現(xiàn)正向名稱解析?()
A.isReachable()B.getHostAddress()C.getHosstName()
D.getByNameQ
38.為了獲得遠(yuǎn)程主機(jī)的文件內(nèi)容,當(dāng)創(chuàng)建URL對(duì)象后,須要運(yùn)用哪個(gè)
方法獲得信息()
A.getPortQB.getHostC.openStream()
D.openConnectionQ
39.java程序中,運(yùn)用TCP套接字編寫服務(wù)端程序的套接字類是()
A.SocketB.ServerSocketC.DatagramSocket
D.DatagramPacket
40.ServerSocket的監(jiān)聽(tīng)方法accept。的返回值類型是()
A.voidB.ObjectC.SocketD.DatagramSocket
41.ServerSocket的getlnetAddress。的返回值類型是()
A.SocketBServerSocketD.InetAddressD,.URL
42.當(dāng)運(yùn)用客戶端套接字Socket創(chuàng)建對(duì)象時(shí),須要指定()
A.服務(wù)器主機(jī)名稱和端口B、服務(wù)器端口和文件C、服務(wù)器名
稱和文件
D.服務(wù)器地址和文件
43.運(yùn)用流式套接字編程時(shí),為了向?qū)Ψ桨l(fā)送數(shù)據(jù),則須要運(yùn)用哪個(gè)方法
()
A.getlnetAddressf)B.getLocalPort()C.getOutputStrearn()
D.getlnputStreaml)
44.運(yùn)用UDP套接字通信時(shí),常用哪個(gè)類把要發(fā)送的信息打包?()
A.StringB.DatagramSocketC.MulticastSocket
D.DatagramPacket
45.運(yùn)用UDP套接字通信時(shí),哪個(gè)方法用于接收數(shù)據(jù)()
A.read()B.receive()C.accept()D.Listen()
46.若要取得數(shù)據(jù)包的中源地址,可運(yùn)用下列哪個(gè)語(yǔ)句()?
A.getAddress()B.getPort()C.getNameQD.getDataQ
47.要運(yùn)用java程序訪問(wèn)數(shù)據(jù)庫(kù),則必需首先與數(shù)據(jù)庫(kù)建立連接,在建
立連接前,應(yīng)加載數(shù)據(jù)庫(kù)驅(qū)動(dòng)程序,該語(yǔ)句為()
AClass.forNamef,sun.jdbc.odbc.JdbcOdbcDriver”)
B.DriverManage.getConnection(9999)
C.Resultrs=
DriverManage.getConnection(").createStatement()
D.Statementst=
DriverManage.getConnection("","”").createStaement()
48.要運(yùn)用java程序訪問(wèn)數(shù)據(jù)庫(kù),則必需首先與數(shù)據(jù)庫(kù)建立連接,該語(yǔ)
句為()
AClass.forNamef"sun.jdbc.odbc.JdbcOdbcDriver”)
B.DriverManage.getConnection(
C.Resultrs=
DriverManage.getConnection(”).createStatement()
D.Statementst=
DriverManage.getConnection(""").createStaement()
49.java程序與數(shù)據(jù)庫(kù)連接后,須要查看某個(gè)表中的數(shù)據(jù),運(yùn)用下列哪
個(gè)語(yǔ)句?()
A.executeQueryOB.executeUpdateQCexecuteEdit()
D.executeSelect()
50.java程序與數(shù)據(jù)庫(kù)連接后,須要查看某個(gè)表中的數(shù)據(jù),運(yùn)用下列哪
個(gè)語(yǔ)句?()
A.executeQueryOB.executeUpdate()CexecuteEdit()
D.executeSelect()
二、填空題
1.StdoutSystem.out作為PrintStream的實(shí)例,來(lái)實(shí)現(xiàn)stdout,它
代表的是一屏幕
2.StdinSystem.in作為Inputstream類的一個(gè)實(shí)例來(lái)實(shí)現(xiàn)stdin,它
代表的是健盤,你可以運(yùn)用其中兩個(gè)成員函數(shù),read。讓你從輸入中讀一
個(gè)字節(jié),skipQongn)讓你在輸入中跳過(guò)n個(gè)字節(jié)。
3.Java中的IO流分為兩種,一種是字節(jié)流,另一種是字符流,分別由
四個(gè)抽象類來(lái)表示(每種流包括輸入和輸出兩種所以一共四
個(gè)):InputStream,Outputstream,Reader,Writer。它們通過(guò)重載
read()和write()方法定義了6個(gè)讀寫操作方法。
4.File類不是一他襟型的I/O類,在java.io類庫(kù)中它是唯一的
non-streamm,既不能取文件內(nèi)容,也不能修改文件內(nèi)容,主要作
用是收集槽案(或目的相%J信息,例如:建立文件對(duì)象、修改文件名、
設(shè)置文件屬性、測(cè)試文件屬性
5.書目是一個(gè)包含其他文件和路徑列表的File類。當(dāng)你創(chuàng)建一個(gè)File對(duì)
象且它是書目時(shí),isDirectory()方法返回ture。這種狀況下,可以調(diào)用
該對(duì)象的String[]list()方法來(lái)提取該書目?jī)?nèi)部其他文件和書目的列表
6.全部的輸出過(guò)濾諭都是抽象類——的子類。
(FilterOutputStreain)
7、字符輸入流BufferedReader運(yùn)用了一____技術(shù)。
(Printstream)
8、InputStreamReader負(fù)責(zé)將Inputstream轉(zhuǎn)化成Reader,而
OutputStreamWriter貝i]將Outputstream轉(zhuǎn)化成Writer。事實(shí)上是通
過(guò)byte[]和String來(lái)關(guān)聯(lián)。
9、設(shè)a.txt為當(dāng)前書目下的一個(gè)文本文件,則以字符方式向該文件寫數(shù)
據(jù)時(shí),須要建立的輸出流通道為:new("a.txt");
10.隨機(jī)訪問(wèn)文件類是RandomAsessFile,它實(shí)現(xiàn)了與
DatalnputStream,DataOutputStream類同樣實(shí)現(xiàn)的接口Datalnput,
DataOutput.。
11.實(shí)現(xiàn)多線程的兩種方式是:1、繼承Thread類;2、實(shí)現(xiàn)Runnable
接口。
12、取得當(dāng)前線程的語(yǔ)句是:Thread.currentThread();
13.主線程的名稱是main,默認(rèn)創(chuàng)建的第一個(gè)子線程的名稱是
thread-O
14.可以調(diào)用Thread類的方法getPriority()和setPriority()來(lái)
存取線程的優(yōu)先級(jí),線程的優(yōu)先級(jí)界于1(MINPRIORITY)和的
(MAXPRIORITY)之間,缺省是5(NORM_PRIORITY)。
15.(1)當(dāng)多個(gè)線程同時(shí)運(yùn)行時(shí),會(huì)產(chǎn)生數(shù)據(jù)錯(cuò)誤與其它沖突問(wèn)題。Java
語(yǔ)言供應(yīng)了線程同步限制機(jī)制,一是鎖定共享資源,使得在任何時(shí)
刻只有一個(gè)線程能夠訪問(wèn)共享資源,以保持共享資源的完整和一樣,二是
讓相互通信的線程運(yùn)行,以保證通信的正確性。
(2)線程之間的通信有兩種方法:一是把共享變量和方法封閉在一個(gè)類
中,二是利用系統(tǒng)方法和限制線程通信.實(shí)現(xiàn)對(duì)共享資源互
拆訪問(wèn)的方法是在方法聲明中加入synchronized關(guān)健字來(lái)聲明一個(gè)訪問(wèn)
共享資源的方法,或者通過(guò)synchronized關(guān)鍵字來(lái)聲明synchronized
塊。
16、守護(hù)線程一般被用于在后臺(tái)為其它線程供應(yīng)服務(wù)。調(diào)用方法
isDaemonO來(lái)推斷一個(gè)線程是否是守護(hù)線程,也可以調(diào)用方法
setDaemon。將一個(gè)線程設(shè)為守護(hù)線程。
17、InetAddress是用于封裝IP地址和DNS的一個(gè)類。
18、TCP/IP套接字是最牢靠的雙向流協(xié)議。等待客戶端的服務(wù)器運(yùn)用
Serversocket類,而要連接到服務(wù)器的客戶端則運(yùn)用Socket類。
19、java.net包中供應(yīng)了一個(gè)類MuIticastSocket,允許數(shù)據(jù)報(bào)以廣
播方式發(fā)送到該端口的全部客戶。
20.在TCP/IP協(xié)議的傳輸層除了TCP協(xié)議之外還有一個(gè)UDP協(xié)議。
幾個(gè)標(biāo)準(zhǔn)的應(yīng)用層協(xié)議HTTP,…運(yùn)用的都是TCP協(xié)議。UDP協(xié)議主要
用于須要很強(qiáng)的實(shí)時(shí)交互性的場(chǎng)合,如網(wǎng)絡(luò)游戲,視頻會(huì)議等
21、當(dāng)我們得到一個(gè)URL對(duì)象后,就可以通過(guò)它讀取指定的WWW資
源。這時(shí)我們將運(yùn)用URL的方法openStream。,其定義為:InputStream
openStrearn。;
22、URL的構(gòu)造方法都聲明拋棄非運(yùn)行時(shí)異樣
MalformedURLException,因此生成URL對(duì)象時(shí),我們必需要對(duì)這一
例外進(jìn)行處理,通常是用try-catch語(yǔ)句進(jìn)行捕獲。
23、一個(gè)Statement對(duì)象,可以執(zhí)行多個(gè)sql語(yǔ)句以后,批量更新。
這多個(gè)語(yǔ)句可以是delete、update、insert等或兼有
24、Java數(shù)據(jù)庫(kù)操作基本流程:取得數(shù)據(jù)庫(kù)連接、執(zhí)行sql語(yǔ)句、處
理執(zhí)行結(jié)果、釋放數(shù)據(jù)庫(kù)連接。
25、下列程序的功能是在監(jiān)控臺(tái)上每隔一秒鐘顯示一個(gè)字符串
“Hello”,能夠填寫在程序中下劃線位置,使程序完整并能正確運(yùn)行的語(yǔ)
句是
publicclassTestimplementsRunnable{
publicstaticvoidmainfStringargs[|){
Testt=newTest();
Threadtt=newThread(t);
tt.startQ;
)
publicvoidrun(){
for(;;){
try{
}catch(e){}
System.put.println("Hello");
答:Thread.sleep(l000)
InterruptedException
三、簡(jiǎn)答與程序分析、填空、設(shè)計(jì)題
第一部分:簡(jiǎn)答
1、線程的生命期內(nèi)包括哪些狀態(tài)?
答:新建狀態(tài)、就緒狀態(tài)、運(yùn)行狀態(tài)、堵塞狀態(tài)、死亡狀態(tài)
見(jiàn)下圖:各狀態(tài)之間的切換關(guān)系
2、什么是線程的新建狀態(tài)?
答:線程對(duì)象已經(jīng)創(chuàng)建,還沒(méi)有在其上調(diào)用start。方法。
3、什么是線程的可運(yùn)行狀態(tài)?
答:當(dāng)線程有資格運(yùn)行,但調(diào)度程序還沒(méi)有把它選定為運(yùn)行線程時(shí)
線程所處的狀態(tài)。當(dāng)start。方法調(diào)用時(shí),線程首先進(jìn)入可運(yùn)行狀態(tài)。在線
程運(yùn)行之后或者從堵塞、等待或睡眠狀態(tài)回來(lái)后,也返回到可運(yùn)行狀態(tài)。
4、什么是線程的死亡態(tài)?
答:當(dāng)線程的run()方法完成時(shí)就認(rèn)為它死去。這個(gè)線程對(duì)象或許是
活的,但是,它已經(jīng)不是一個(gè)單獨(dú)執(zhí)行的線程。線程一旦死亡,就不能復(fù)
生。假如在一個(gè)死去的線程上調(diào)用start。方法,會(huì)拋出
java.lang.IllegalThreadStateException異樣。
5、調(diào)用join。方法有何作用?
答:保證當(dāng)前線程停止執(zhí)行,直到該線程所加入的線程完成為止。然
而,假如它加入的線程沒(méi)有存活,則當(dāng)前線程不須要停止。
6.現(xiàn)有字符串S="hello,java!”,則以此字符串生成待發(fā)送
DatagramPacket包dgp的語(yǔ)句是:
答:
Byte[]str=s.getbytes();
DatagramPacketdgp=newDatagramPacket(str,
str.length(),目的主機(jī),目的端口);
7、介紹運(yùn)用javaSocket創(chuàng)建客戶端Socket的過(guò)程。
答:try{
Socketsocket=newSocket(目標(biāo)主機(jī),目標(biāo)端口);
}catch(IOExceptione){
System.out.println("Error:H+c);
8、介紹運(yùn)用javaServerSocket創(chuàng)建服務(wù)器端ServerSocket的過(guò)程。
答:
ServerSocketserver=null;
try{
server=newServerSocket(監(jiān)聽(tīng)端口);
(catch(IOExceptione){
System.out.println("cannotlistento:"+e);
}
Socketsocket=null;
try{
socket=server.accept();
}catch(IOExceptione){
System.out.println("Error:"+e);
9、寫出一種運(yùn)用java流式套接式編程時(shí),創(chuàng)建雙方通信通道的語(yǔ)句。
答:
PrintStreamos=newPrintStreamfnew
BufferedOutputStreem(socket.getOutputStream()));
DatalnputStreamis=new
DataInputStream(socket.getInputStream());
PrintWriterout=newPrintWriter(socket.getOutStream(),true);
BufferedReaderin=newButfferedReaderfnew
InputSteramReader(Socket.getInputStream()));
10、對(duì)于建立功能齊全的Socket,其工作過(guò)程包含以下四個(gè)基本的步驟:
(1)創(chuàng)建Socket;
(2)打開(kāi)連接到Socket的輸入/出流;
(3)依據(jù)確定的協(xié)議對(duì)Socket進(jìn)行讀/寫操作;
(4)關(guān)閉Socket.
11、簡(jiǎn)述基于TCP與UDP套接字通信的主要區(qū)分
答:TCP,牢靠,傳輸大小無(wú)限制,但是須要連接建立時(shí)間,差錯(cuò)限
制開(kāi)銷大。
UDP,不行靠,差錯(cuò)限制開(kāi)銷較小,傳輸大小限制在64K以下,
不須要建立連接。
12、寫出DatagramSocket的常用構(gòu)造方法:
答:
DatagramSocket();
DatagramSocket(intprot);
DatagramSocketfintport,InetAddressladdr)
port指明socket所運(yùn)用的端口號(hào),假如未指明端口號(hào),則把socket
連接到本地主機(jī)上一個(gè)可用的端口。laddr指明一個(gè)可用的本地地址。
13>介紹一下DatagramPacket的常用構(gòu)造方法:
DatagramPacket(bytebuf[],intlength);
DatagramPacketfbytebuf[],intlength,InetAddressaddr.int
port);
DatagramPacket(byte[]buf,intoffset,intlength);
DatagramPacket(byte[|buf,intoffset,intlength,
InetAddressaddress,intport);
其中,buf中存放數(shù)據(jù)報(bào)數(shù)據(jù),length為數(shù)據(jù)報(bào)中數(shù)據(jù)的長(zhǎng)度,addr
和port旨明目的地址,offset指明白數(shù)據(jù)報(bào)的位移量。
14、在接收端接收數(shù)據(jù)報(bào)的主要語(yǔ)句:
答:bytebuf[]=newbyte[n];
DatagramPacketpacket=newDatagramPacket(buf.n);
Socket.receive(packet);
15、寫出java程序中用Statement來(lái)執(zhí)行sql杳詢與更新語(yǔ)句
Stringsql;〃表示查詢或更新的操作語(yǔ)句;
Statementsm=cn.createStatement();//cn表示數(shù)據(jù)庫(kù)連接
sm.executeQuery(sql);//執(zhí)行數(shù)據(jù)查詢語(yǔ)句(select)
sm.executeUpdate(sql);//執(zhí)行數(shù)據(jù)更新語(yǔ)句(delete、update、insert、
drop等)
statement.closeQ;
16.什么叫流?流式輸入輸出有什么特點(diǎn)?
17.Java流被分為字節(jié)流、字符流兩大流類,兩者有什么區(qū)分?
18.File類有哪些構(gòu)造函數(shù)和常用方法?
電簽_所謂流是指同一臺(tái)計(jì)算機(jī)或網(wǎng)絡(luò)中不同計(jì)算機(jī)之間有序運(yùn)動(dòng)著的
數(shù)據(jù)序列,Java把這些不同來(lái)源和目標(biāo)的數(shù)據(jù)都統(tǒng)一抽象為數(shù)據(jù)流。數(shù)
據(jù)流可分為輸入流和輸出流,輸入流代表從其他設(shè)備流入計(jì)算機(jī)的數(shù)據(jù)序
列,輸出流代表從計(jì)算機(jī)流向外部設(shè)備的數(shù)據(jù)序列。
流式輸入輸出的特點(diǎn)是數(shù)據(jù)的獲得和發(fā)送沿?cái)?shù)據(jù)序列的依次進(jìn)行,即每一
個(gè)數(shù)據(jù)都必需等待排在它前面的數(shù)據(jù),等前面的數(shù)據(jù)讀入或送出之后才能
被讀寫。所以流和隊(duì)列一樣,只能以“先進(jìn)先出”的方式對(duì)其中的數(shù)據(jù)進(jìn)
行讀寫,而不能隨意選擇讀寫的位置。
17.答:兩者都作為Object類的干脆子類,基本輸入流(Inputstream)
和基本輸出流(Outputstream)是處理以8位字節(jié)為基本單位的字節(jié)流
類;Reader?和Writer類是特地處理16位字符流的類。
18.答:構(gòu)造函數(shù)有:
(1)publicpathname):創(chuàng)建一個(gè)對(duì)應(yīng)于參數(shù)pathname的File類
對(duì)象。參數(shù)pathname是包含書目和文件名的字符串。假如沒(méi)有文件名,
則代表書目。
(2)publicparent,Stringchild):該構(gòu)造函數(shù)將pathname分成兩
部分parent和child,參數(shù)parent表示書目或文件所在路徑,參數(shù)child
表示書目或文件名稱。
(3)publicparent,Stringchild):該構(gòu)造函數(shù)與上面一個(gè)不同在于
將parent的參數(shù)類型由String變?yōu)镕ile,代表parent是一個(gè)已經(jīng)創(chuàng)建
的File類文件對(duì)象(指向書目)。
常用方法有:
(1)publicbooleancanWrite():返[01文件是否可寫。
(2)publicbooleancanRead():返回文件是否可讀。
(3)publicbooleancreateNewFile():當(dāng)文件不存在時(shí)創(chuàng)建文件。
19.位置指針的作用是什么?RandomAccessFile類供應(yīng)了哪些方法實(shí)
現(xiàn)對(duì)指針的限制?
19.答:要實(shí)現(xiàn)對(duì)文件的隨機(jī)讀取,也就是在文件的任何位置執(zhí)行讀寫數(shù)
據(jù)的操作,須要一個(gè)指針來(lái)指定讀寫的位置。在創(chuàng)建RandomAccessFile
類對(duì)象的同時(shí),系統(tǒng)自動(dòng)創(chuàng)建了一個(gè)指向這個(gè)文件開(kāi)頭的指針,當(dāng)執(zhí)行讀
寫操作后,指針自動(dòng)指向被讀寫數(shù)據(jù)之后的第一個(gè)字節(jié)處。指針初始值是
0,每讀/寫一個(gè)字節(jié),指針自動(dòng)增加loRandomAccessFile類供應(yīng)了
一些限制指針移動(dòng)的方法。
publiclongget。;獲得當(dāng)前指針指向文件的位置。
pulbicvoidseek(longpos);將指針移動(dòng)到參數(shù)pos指定的位置。
publicintskipBytesfintn);指針從當(dāng)前位置向后移動(dòng)n個(gè)字節(jié)位置,并
返回指針實(shí)際移動(dòng)的字節(jié)數(shù)。
其次部分:分析程序功能或完成程序
2、利用文件輸入輸出流編寫一個(gè)實(shí)現(xiàn)文件拷貝的程序,源文件名和目標(biāo)
文件名通過(guò)叮囑行參數(shù)傳入。
答:
importjava.io.*;
classCopyFile{
publicstaticvoidmain(String[]args){
String;
intch=0;
try{
[0];
[1];
fis=new(filel);
fos=new(file2);
while((ch=fis.read())!=-l)
fos.write(ch);
fis.closeQ;
fos.closeQ;
)
catch(e){
System.out.println("源文件沫找到!”);
}catch(ArrayIndexOutOfBoundsExceptione){
System.out.printin("缺少運(yùn)行參數(shù)!”);
System.exit(-l);
catch(lOExceptione){
System.out.println(e.toStringO);
}
4、編寫一個(gè)程序,從鍵盤輸入一串字符,統(tǒng)計(jì)這串字符中英文字母、數(shù)
字、其他符號(hào)的字符數(shù)。
4.答:
importjava.io.*;
publicclassCount{
publicstaticvoidmain(String[]args)
{
intx=O,y=O,z=O;
intch;
try{
while((ch=System.in.read())!='\r'){
if(ch>='A'&&ch<=,Z,||ch>='a'&&ch<='z')
x++;
elseif(ch>='0'&&ch<='9')
y++;
else
z++;
}catch(IOExceptione){
System.out.println(e.toStringO);
)
System.out.printin("英文字母:"+x);
System.out.println("數(shù)字字符:"+y);
System.out.printing其它字符:"+z);
)
)
5.編寫一個(gè)程序,從鍵盤輸入一串字符,從屏幕輸出并將其存入a.txt
文件中。
5.答:
importjava.io.*;
publicclassInFile;
publicstaticvoidmain(String[]args)
|
intch;
try{
out=new("a.txt");
while((ch=System.in.read())!=,\r'){
System.out.write(ch);
out.write(ch);
out.closeQ;
System.out.write('\n,);
}catch(IOExceptione){
System.out.println(e.toStringO);
}
System.out.println("輸出至文件完畢!”);
)
)
8、下列程序向屏幕輸出文本文件內(nèi)容:請(qǐng)完成所缺少的代碼
importjava.io.*;
classreadtxt
{
publicstaticvoidmain(String[]args){
try{
fl=newC'u.txt");
BufferedReaderbfl=newBufferedReader(f1);
Stringline;
line=bfl.readLinef);
while(Knel=nun)//推斷所讀的一行內(nèi)容是否為空;
System.out.printin(line);
line=bfl?readLine();//接著讀入下一行
bfl.closeO;〃關(guān)閉文件的輸入流;
}catch(IOExceptione){e.printStackTrace();}
}}
10、請(qǐng)編寫java程序,訪問(wèn)所在的主頁(yè)文件
答:publicclassURLReader{
publicstaticvoidmain(String[]argslthrowsException{/聲
明拋出全部例外
URLtire=newURL(叫;//構(gòu)建一URL對(duì)象
BufferedReaderin=newBufferedReaderfnew
IiwutStreamReader(tirc.openStream()));
//運(yùn)用openStream得到一輸入流并由此構(gòu)造一個(gè)
BufferedReader對(duì)象
StringinputLine;
while((inputLine=in.readLineO)!=null)〃從輸入流不斷的讀
數(shù)據(jù),直到讀完為止
System.outprintln(inputLine);//把讀入的數(shù)據(jù)打印到屏幕
上
in.close。;〃關(guān)閉輸入流
11、從鍵盤上輸入主機(jī)名稱,編寫類似ping的程序,測(cè)試連接效果。
import.*;
importjava.io.*;
classPing{
publicstaticvoidmain(String[]args)
{System.out.printin("請(qǐng)輸入ping主機(jī)名稱或地址:\n");
try{
Stringhost=keyreadline();
InetAddressip=InetAddress.getByName(host);
longtl=System.currentTimeMillisO;
if(ip.isReachable(5OOO))
{longt2=System.currentTimnMillis();
System.out.println("\nReplyfrom"+ip.getHostAddressQ+
time<=H+(t2-tl)+"ms");
System.out.println();
)
else{System.out.printlnf'Requesttimedout.");
}}
catch(lOExccptionc)
{System.out.printin("Requesttimedout.");}
privatestaticStringkeyreadlinef){
BufferedReaderbr=newBufferedReaderfnew
InputStreamReader(System.in));
Stringstr=null;
try{
str=br.readLinef);
}catch(lOExceptione){
e.printStackTraceQ;}
returnstr;
)
|
12、設(shè)服務(wù)器端程序監(jiān)聽(tīng)端口為8629,當(dāng)收到客戶端信息后,首先推斷
是否是“BYE”,若是,則立刻向?qū)Ψ桨l(fā)送“BYE”,然后關(guān)閉監(jiān)聽(tīng),結(jié)束
程序。若不是,則在屏幕上輸出收到的信息,并由鍵盤上輸入發(fā)送到對(duì)方
的應(yīng)答信息。請(qǐng)編寫程序完成此功能。
mport.*;
importjava.io.*;
classServer{
publicScrvcr(){
try{
ServerSocketss=newServerSocket(8629);
System.out.println("服務(wù)器端已運(yùn)行,等待客戶端連接:”);
Socketsocket=ss.accept。;//接收客戶端的連接請(qǐng)求;
BufferedReaderin=newBufferedReaderfnew
InputStreamReader(socket.getlnputStreamO));
PrintWriterout=new
PrintWriter(socket.getOutputStream。,true);
BufferedReaderbr=newBufferedReaderfnew
InputStreamReader(System.in));
Stringline;
while(true)
{line=(in.readLine().trim());
if(line?equals(”BYE"))
{out.println("BYE'^);
out.closeQ;
in.close();
socket.close();
br.closeQ;
ss.closeQ;
break;}
System.out.printing客戶輸入為:"+line);
System.out.println("請(qǐng)輸入回答:“);
line=br.readLine();〃從鍵盤上輸入信息;
out.println(line);//向?qū)Ψ桨l(fā)送信息
}}
catch(lOExceptione){}
)
publicstaticvoidmain(String[]args)throwsException!
newServerf);
}
}
13、TCP客戶端須要向服務(wù)器端8629發(fā)出連接請(qǐng)求,與服務(wù)器進(jìn)行信
息溝通,當(dāng)收到服務(wù)器發(fā)來(lái)的是“BYE”時(shí),立刻向?qū)Ψ桨l(fā)送“BYE”,
然后關(guān)閉連接,否則,接著向服務(wù)器發(fā)送信息。
importjava.io.*;
import.*;
classClient2{
publicClient2()
{try
{Strings;
Socketsocket=newSocket("服務(wù)器地址”,8629);
BufferedReaderin=newBufferedReaderfnew
InputStreamReader(socket.getlnputStreamO));
PrintWriterout=new
PrintWriter(socketgetOutputStrearn。,true);
BufferedReaderline=newBufferedReaderfnew
InputStreamReader(System.in));
while(true)
{System.out.println("請(qǐng)向服務(wù)器輸出一條字符串:");
s=line.readLine();
out.println(s);〃向服務(wù)器發(fā)出信息;
s=in-readLineO.trim();//收到服務(wù)器發(fā)來(lái)的信
息;
System.out.println("服務(wù)器返回的信息是:");
System.out.println(s);
ifts.equalsC'BYE0))
{out.println(“BYE”);
line.closeQ;
out.closeQ;
in.closeQ;
socket.closeQ;break;}
catch(lOExccptionc){)
publicstaticvoidmain(String[]args){
newClient2();
})
14、UDP接收端
importjava.io.*;
import.*;
classServer{
publicstaticvoidmain(String[]args){
newUDPServer();}
}
classUDPServer{
publicUDPServerQ{
try{
DatagramSocketsocket=newDatagramSocket(1986);//建立
一個(gè)Socket連接
System.out.println("服務(wù)器IP:"+
InetAddress.getLocalHost().getHostAddress());//顯示服務(wù)器信息
while(true){
//接收
bytc[]instr=newbytc[200];
DatagramPacketreceive=newDatagramPacket(instr,
instr,length);
socket.receive(eeceive);//接收客戶機(jī)發(fā)過(guò)來(lái)的數(shù)據(jù)
Stringstr=newString(receive.getData());//提取數(shù)據(jù)
if(str.trim().equals("BYE"))
{socket.close();break;}
System.out.println("收到客戶端消息:"+str.trim。);//打印客戶
機(jī)消息
//發(fā)送
System.out.print("服務(wù)器發(fā)送消息:”);
str=newBufferedReaderfnew
InputStreamReader(System.in)).readLine();//得至!j輸入的數(shù)據(jù)
byte[]outstr=newbyte[str.length()];
outstr=str.getBytesQ;
Data
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 某著名企業(yè)六局高層建筑鋁合金模板施工技術(shù)
- 某著名企業(yè)外貿(mào)企業(yè)如何開(kāi)某省市場(chǎng)
- 《GBT 16777-2008建筑防水涂料試驗(yàn)方法》專題研究報(bào)告
- 《GBT 4702.16-2008金屬鉻 硫含量的測(cè)定 紅外線吸收法和燃燒中和滴定法》專題研究報(bào)告
- 道路安全培訓(xùn)季度計(jì)劃課件
- 道路交通安全知識(shí)課件
- 2025-2026年西師版初三歷史上冊(cè)期末真題和答案
- 2025-2026年蘇教版九年級(jí)化學(xué)上冊(cè)期末題庫(kù)試題附答案
- 返校安全規(guī)范培訓(xùn)
- 三年(2023-2025)黑龍江中考語(yǔ)文真題分類匯編:專題12 說(shuō)明文閱讀(解析版)
- 民辦學(xué)校退費(fèi)管理制度
- T/CIE 115-2021電子元器件失效機(jī)理、模式及影響分析(FMMEA)通用方法和程序
- KubeBlocks把所有數(shù)據(jù)庫(kù)運(yùn)行到K8s上
- 廣東省江門市蓬江區(qū)2025年七年級(jí)上學(xué)期語(yǔ)文期末考試試卷及答案
- 蘇州市施工圖無(wú)障礙設(shè)計(jì)專篇參考樣式(試行)2025
- 等腰三角形重難點(diǎn)題型歸納(七大類型)原卷版-2024-2025學(xué)年北師大版八年級(jí)數(shù)學(xué)下冊(cè)重難點(diǎn)題型突破
- 臨時(shí)用電變壓器安裝方案
- 社會(huì)工作項(xiàng)目調(diào)研方案含問(wèn)卷及訪談提綱
- 2025年包頭職業(yè)技術(shù)學(xué)院?jiǎn)握新殬I(yè)技能測(cè)試題庫(kù)完整版
- 全國(guó)高校輔導(dǎo)員素質(zhì)能力大賽試題(談心談話、案例分析)
- 《XXXX煤礦隱蔽致災(zāi)地質(zhì)因素普查報(bào)告》審查意見(jiàn)
評(píng)論
0/150
提交評(píng)論