成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Java while循環語句如何處理關鍵環節

開發 后端
Java while循環語句需要我們不斷的學習,在細節方面我們會有很多需要注意的地方。下面我們就看看如何才能更好的學習。

Java while循環語句會有很多重要的環節都使用到。下面我們就來看看相關的問題解決方案和相關的代碼。希望大家在之后的學習和生活中能更好的使用Java while循環語句。

這里我們將討論 handleConnection() 方法的結構,這個方法生成一個新的 Thread 來處理每個連接。我們將分兩部分討論這個問題。這一屏我們將著重該方法本身,然后在下一屏研究該方法所使用的 ConnectionHandler 助手類的結構。

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代碼

  1. import java.io.*;   
  2. import java.net.*;   
  3. public class ConnectionHandler implements Runnable{   
  4. Socket socketToHandle;   
  5. public ConnectionHandler(Socket aSocketToHandle) {   
  6. socketToHandle = aSocketToHandle;   
  7. }   
  8. public void run() {   
  9. }   
  10. }   
  11. import java.io.*;  
  12. import java.net.*;  
  13. public class ConnectionHandler implements Runnable{  
  14. Socket socketToHandle;  
  15. public ConnectionHandler(Socket aSocketToHandle) {  
  16. socketToHandle = aSocketToHandle;  
  17. }  
  18. public void run() {  

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

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

實現 run()

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

Java代碼

  1. public void run() {   
  2. try {   
  3. PrintWriter streamWriter = new PrintWriter(socketToHandle.getOutputStream());   
  4. BufferedReader streamReader =   
  5. new BufferedReader(new InputStreamReader(socketToHandle.getInputStream()));   
  6. String fileToRead = streamReader.readLine();   
  7. BufferedReader fileReader = new BufferedReader(new FileReader(fileToRead));   
  8. String line = null;   
  9. while ((line = fileReader.readLine()) != null)   
  10. streamWriter.println(line);   
  11. fileReader.close();   
  12. streamWriter.close();   
  13. streamReader.close();   
  14. } catch (Exception e) {   
  15. System.out.println("Error handling a client: " + e);   
  16. }   
  17. }   
  18. public void run() {  
  19. try {  
  20. PrintWriter streamWriter = new PrintWriter(socketToHandle.getOutputStream());  
  21. BufferedReader streamReader =  
  22. new BufferedReader(new InputStreamReader(socketToHandle.getInputStream()));  
  23. String fileToRead = streamReader.readLine();  
  24. BufferedReader fileReader = new BufferedReader(new FileReader(fileToRead));  
  25. String line = null;  
  26. while ((line = fileReader.readLine()) != null)  
  27. streamWriter.println(line);  
  28. fileReader.close();  
  29. streamWriter.close();  
  30. streamReader.close();  
  31. } catch (Exception e) {  
  32. System.out.println("Error handling a client: " + e);  
  33. }  

 

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

Java代碼

  1. FileReader fileReader = new FileReader(new File(streamReader.readLine()));   
  2. BufferedReader bufferedFileReader = new BufferedReader(fileReader);   
  3. String line = null;   
  4. while ((line = bufferedFileReader.readLine()) != null) {   
  5. streamWriter.println(line);   
  6. }   
  7. FileReader fileReader = new FileReader(new File(streamReader.readLine()));  
  8. BufferedReader bufferedFileReader = new BufferedReader(fileReader);  
  9. String line = null;  
  10. while ((line = bufferedFileReader.readLine()) != null) {  
  11. streamWriter.println(line);  
  12. }  

 

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

【編輯推薦】

  1. 用Java多線程實現無阻塞讀取遠程文件
  2. 使用Java多線程實現任務分發
  3. Java多線程初學者指南系列教程
  4. Java多線程優化之偏向鎖原理分析
  5. Java多線程程序如何掌握基本語法
責任編輯:張浩 來源: 計算機世界
相關推薦

2014-11-10 10:05:58

綜合布線

2009-01-19 14:29:06

ETL數據倉庫本質

2023-06-06 15:47:26

人工智能ChatGPT

2010-03-17 09:33:30

Java多線程方案

2013-01-20 19:40:21

2022-09-26 07:11:12

數據堆棧視頻模式

2020-12-11 05:57:01

Python循環語句代碼

2010-09-09 16:34:19

SQL循環while

2010-03-19 14:18:07

Java Socket

2022-04-12 07:32:40

引擎模式Spring策略模式

2009-11-10 11:30:12

VB.NET循環語句

2011-12-15 12:32:19

JavaNIO

2019-08-15 10:20:19

云計算技術安全

2012-12-12 09:49:41

2020-12-29 09:11:33

LinuxLinux內核

2017-03-13 13:21:34

Git處理大倉庫

2019-12-23 10:20:12

Web圖片優化前端

2017-10-26 08:43:18

JavaScript內存處理

2021-03-01 07:31:53

消息支付高可用

2010-05-17 10:04:45

點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 999视频在线播放 | 欧美一区日韩一区 | 日韩一区和二区 | 欧美一区二区在线观看 | 精品国产乱码一区二区三区a | 日本a v在线播放 | 一级毛片在线播放 | 日韩一区二区三区视频在线观看 | 久久国产精品视频观看 | h在线播放 | 狠狠亚洲 | 亚洲成人精品在线 | 天天操网 | 色婷婷综合久久久中字幕精品久久 | 高清av一区| 欧美日韩精品一区 | 欧美在线视频二区 | 精品欧美一区二区精品久久 | 九色 在线| 久久欧美高清二区三区 | 九九热这里只有精品在线观看 | 一区二区在线免费观看 | 亚洲在线| 一级黄色片一级黄色片 | 国产精品免费视频一区 | 国产精品片aa在线观看 | 一区二区视频在线 | 91视频一区 | 午夜成人在线视频 | 国产九九精品视频 | 成人久久久 | 国产精品视频一二三区 | 日本不卡一区 | 欧美成人h版在线观看 | 国产婷婷综合 | 国产欧美精品在线观看 | 香蕉视频一区二区 | 一区在线视频 | 97视频网站| 国产高清视频 | 高清成人免费视频 |