溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Java中如何利用while循環(huán)語(yǔ)句處理關(guān)鍵環(huán)節(jié)

發(fā)布時(shí)間:2022-05-23 10:57:28 來(lái)源:億速云 閱讀:180 作者:zzz 欄目:大數(shù)據(jù)

這篇文章主要介紹“Java中如何利用while循環(huán)語(yǔ)句處理關(guān)鍵環(huán)節(jié)”,在日常操作中,相信很多人在Java中如何利用while循環(huán)語(yǔ)句處理關(guān)鍵環(huán)節(jié)問(wèn)題上存在疑惑,小編查閱了各式資料,整理出簡(jiǎn)單好用的操作方法,希望對(duì)大家解答”Java中如何利用while循環(huán)語(yǔ)句處理關(guān)鍵環(huán)節(jié)”的疑惑有所幫助!接下來(lái),請(qǐng)跟著小編一起來(lái)學(xué)習(xí)吧!

Java代碼

  1. public void handleConnection(Socket connectionToHandle) {   

  2. new Thread(new ConnectionHandler(connectionToHandle)).
    start();   

  3. }   

  4. public void handleConnection(Socket connectionToHandle) {  

  5. new Thread(new ConnectionHandler(connectionToHandle)).
    start();  

我們對(duì) RemoteFileServer 所做的大改動(dòng)就體現(xiàn)在這個(gè)方法上。我們?nèi)匀辉?a title="服務(wù)器" target="_blank" href="http://www.kemok4.com/">服務(wù)器接受一個(gè)連接之后調(diào)用 handleConnection() ,但現(xiàn)在我們把該 Socket 傳遞給 ConnectionHandler 的一個(gè)實(shí)例,它是 Runnable 的。我們用 ConnectionHandler 創(chuàng)建一個(gè)新 Thread 并啟動(dòng)它。ConnectionHandler 的 run() 方法包含Socket 讀/寫(xiě)和讀 File 的代碼,這些代碼原來(lái)在 RemoteFileServer 的 handleConnection() 中。

4. 處理連接:第 2 部分

這里是 ConnectionHandler 類(lèi)的結(jié)構(gòu):

Java代碼

import java.io.*;   import java.net.*;   public class ConnectionHandler implements Runnable{   Socket socketToHandle;   public ConnectionHandler(Socket aSocketToHandle) {   socketToHandle = aSocketToHandle;   }   public void run() {   }   }   import java.io.*;  import java.net.*;  public class ConnectionHandler implements Runnable{  Socket socketToHandle;  public ConnectionHandler(Socket aSocketToHandle) {  socketToHandle = aSocketToHandle;  }  public void run() {  }

這個(gè)助手類(lèi)相當(dāng)簡(jiǎn)單。跟我們到目前為止的其它類(lèi)一樣,我們導(dǎo)入 java.net 和 java.io 。該類(lèi)只有一個(gè)實(shí)例變量 socketToHandle ,它保存由該實(shí)例處理的 Socket 。類(lèi)的構(gòu)造器用一個(gè) Socket 實(shí)例作參數(shù)并將它賦給 socketToHandle 。

請(qǐng)注意該類(lèi)實(shí)現(xiàn)了 Runnable 接口。實(shí)現(xiàn)這個(gè)接口的類(lèi)都必須實(shí)現(xiàn) run() 方法,我們的類(lèi)就是這樣做的。稍后我們將探究 run() 的細(xì)節(jié)。現(xiàn)在只需知道它將實(shí)際處理連接,所用的代碼跟我們先前在 RemoteFileServer 類(lèi)中看到的是一樣的。

實(shí)現(xiàn) run()

這里我們實(shí)現(xiàn) run() 方法,它將攫取我們的連接的流,用它來(lái)讀寫(xiě)該連接,并在任務(wù)完成之后關(guān)閉它:

Java代碼

public void run() {   try {   PrintWriter streamWriter = new PrintWriter(socketToHandle.getOutputStream());   BufferedReader streamReader =   new BufferedReader(new InputStreamReader(socketToHandle.getInputStream()));   String fileToRead = streamReader.readLine();   BufferedReader fileReader = new BufferedReader(new FileReader(fileToRead));   String line = null;   while ((line = fileReader.readLine()) != null)   streamWriter.println(line);   fileReader.close();   streamWriter.close();   streamReader.close();   } catch (Exception e) {   System.out.println("Error handling a client: " + e);   }   }   public void run() {  try {  PrintWriter streamWriter = new PrintWriter(socketToHandle.getOutputStream());  BufferedReader streamReader =  new BufferedReader(new InputStreamReader(socketToHandle.getInputStream()));  String fileToRead = streamReader.readLine();  BufferedReader fileReader = new BufferedReader(new FileReader(fileToRead));  String line = null;  while ((line = fileReader.readLine()) != null)  streamWriter.println(line);  fileReader.close();  streamWriter.close();  streamReader.close();  } catch (Exception e) {  System.out.println("Error handling a client: " + e);  }  }

ConnectionHandler的 run() 方法所做的事情就是 RemoteFileServer 上的 handleConnection() 所做的事情。首先,我們把 InputStream 和 OutputStream 分別包裝(用 Socket 的 getOutputStream() 和 getInputStream() )進(jìn) BufferedReader 和 PrintWriter 。然后我們用這些代碼逐行地讀目標(biāo)文件:

Java代碼

FileReader fileReader = new FileReader(new File(streamReader.readLine()));   BufferedReader bufferedFileReader = new BufferedReader(fileReader);   String line = null;   while ((line = bufferedFileReader.readLine()) != null) {   streamWriter.println(line);   }   FileReader fileReader = new FileReader(new File(streamReader.readLine()));  BufferedReader bufferedFileReader = new BufferedReader(fileReader);  String line = null;  while ((line = bufferedFileReader.readLine()) != null) {  streamWriter.println(line);  }

請(qǐng)記住我們應(yīng)該從客戶機(jī)獲取一條有效的文件路徑,這樣用該路徑名構(gòu)造一個(gè)新 File ,把它包裝進(jìn) FileReader 以處理讀文件的操作,然后把它包裝進(jìn) BufferedReader 以讓我們逐行地讀該文件。我們?cè)?Java while循環(huán)語(yǔ)句中調(diào)用 BufferedReader 上的 readLine() 直到不再有要讀的行。請(qǐng)記注,對(duì) readLine() 的調(diào)用將造成阻塞,直到有字節(jié)來(lái)到為止。我們獲取一些字節(jié)之后就把它們放到本地的 line 變量中,然后寫(xiě)出到客戶機(jī)上。

到此,關(guān)于“Java中如何利用while循環(huán)語(yǔ)句處理關(guān)鍵環(huán)節(jié)”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識(shí),請(qǐng)繼續(xù)關(guān)注億速云網(wǎng)站,小編會(huì)繼續(xù)努力為大家?guī)?lái)更多實(shí)用的文章!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI