中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

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

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Java中怎么利用 while循環語句處理關鍵環節

發布時間:2021-07-02 14:49:23 來源:億速云 閱讀:167 作者:Leah 欄目:編程語言

這期內容當中小編將會給大家帶來有關Java中怎么利用 while循環語句處理關鍵環節,文章內容豐富且以專業的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

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();  

我們對 RemoteFileServer 所做的大改動就體現在這個方法上。我們仍然在服務器接受一個連接之后調用 handleConnection() ,但現在我們把該 Socket 傳遞給 ConnectionHandler 的一個實例,它是 Runnable 的。我們用 ConnectionHandler 創建一個新 Thread 并啟動它。ConnectionHandler 的 run() 方法包含Socket 讀/寫和讀 File 的代碼,這些代碼原來在 RemoteFileServer 的 handleConnection() 中。

4. 處理連接:第 2 部分

這里是 ConnectionHandler 類的結構:

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() {  }

這個助手類相當簡單。跟我們到目前為止的其它類一樣,我們導入 java.net 和 java.io 。該類只有一個實例變量 socketToHandle ,它保存由該實例處理的 Socket 。類的構造器用一個 Socket 實例作參數并將它賦給 socketToHandle 。

請注意該類實現了 Runnable 接口。實現這個接口的類都必須實現 run() 方法,我們的類就是這樣做的。稍后我們將探究 run() 的細節。現在只需知道它將實際處理連接,所用的代碼跟我們先前在 RemoteFileServer 類中看到的是一樣的。

實現 run()

這里我們實現 run() 方法,它將攫取我們的連接的流,用它來讀寫該連接,并在任務完成之后關閉它:

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() )進 BufferedReader 和 PrintWriter 。然后我們用這些代碼逐行地讀目標文件:

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);  }

請記住我們應該從客戶機獲取一條有效的文件路徑,這樣用該路徑名構造一個新 File ,把它包裝進 FileReader 以處理讀文件的操作,然后把它包裝進 BufferedReader 以讓我們逐行地讀該文件。我們在 Java while循環語句中調用 BufferedReader 上的 readLine() 直到不再有要讀的行。請記注,對 readLine() 的調用將造成阻塞,直到有字節來到為止。我們獲取一些字節之后就把它們放到本地的 line 變量中,然后寫出到客戶機上。

上述就是小編為大家分享的Java中怎么利用 while循環語句處理關鍵環節了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關知識,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

巴林右旗| 东方市| 会宁县| 包头市| 姜堰市| 道孚县| 哈密市| 开鲁县| 定远县| 宣化县| 陇川县| 余姚市| 图木舒克市| 青神县| 沙洋县| 威海市| 乐至县| 交城县| 吉林市| 罗山县| 德阳市| 温泉县| 丰台区| 建瓯市| 汶上县| 荥阳市| 安庆市| 文成县| 调兵山市| 铜鼓县| 海阳市| 武鸣县| 西林县| 宜昌市| 郑州市| 大名县| 潼关县| 繁昌县| 嘉峪关市| 威远县| 高碑店市|