iT邦幫忙

2024 iThome 鐵人賽

DAY 16
0
JavaScript

Java程式實作系列 第 28

Java進階語法-5

  • 分享至 

  • xImage
  •  
  1. 文件與序列化(File I/O and Serialization)

#I/O 操作
Java 提供了多種類別和方法來處理檔案的讀寫,主要分為字元流和位元流兩類:

  • 字元流(Character Streams):用於讀取和寫入文字資料,處理的是字元。常用類包括:
    • FileReader / FileWriter:用來讀寫文本檔案的字元流。

    • BufferedReader/ BufferedWriter:提供了緩衝區來提升讀寫的性能,適合處理大批量資料或多行文本。

    • 位元流(Byte Streams):用於讀寫二進制資料,處理的是位元。常用類包括:

    • InputStream / OutputStream:抽象了所有位元流的讀寫操作。

    • FileInputStream/ FileOutputStream:用來處理檔案的位元流,適合讀取二進制檔案(如圖片、音訊等)。

基本操作範例:

  1. 讀取檔案:
    使用 BufferedReader來讀取文本檔案,可以逐行處理。
  2. 寫入檔案:
    使用 BufferedWriter將資料寫入檔案,支援大批量寫入,且透過緩衝區提升效率。

#NIO(New I/O)
Java NIO(Non-blocking I/O)是從 Java 1.4 開始引入的一套新的 I/O 處理工具,與傳統的 I/O 相比,它提供了更高效、可擴展的 I/O 操作方式。

-非阻塞 I/O:NIO 的核心特性是非阻塞模式,允許執行緒在進行 I/O 操作時不必等待操作完成,而是可以繼續執行其他任務。這對高性能伺服器非常有用,特別是需要處理大量並發連線的應用程序。

-Channels和 Buffers:NIO 使用 Channel來進行 I/O 操作,資料會先存儲在 Buffer中,再透過 Channel進行讀寫。常見的 Channel包括 FileChannel、SocketChannel,而 Buffer是一個用來儲存資料的容器。

-選擇器(Selector):Selector是 NIO 的另一個重要特性,它允許單個執行緒監視多個通道,適合需要處理大量 I/O 操作但不想啟動多個執行緒的情況。

#序列化(Serialization)
序列化是將物件轉換為字節流以便保存到檔案或通過網路傳輸的過程。反序列化則是將字節流還原為物件。

  • Serializable介面:Java 的序列化機制依賴於 Serializable介面,當一個類實現該介面後,它的物件就可以被序列化。序列化後的物件可以保存到檔案或通過網路傳輸。

  • ObjectInputStream和 ObjectOutputStream:這兩個類分別用來反序列化和序列化物件。
    ObjectOutputStream將物件轉換為位元流並寫入檔案,ObjectInputStream則負責讀取位元流並還原為物件。

#自定義序列化邏輯

  • transient關鍵字:如果一個屬性不需要被序列化,可以使用 transient 關鍵字標記,這樣在序列化過程中該屬性會被忽略。

  • 自定義序列化方法:可以透過覆寫 writeObject和 readObject方法來自定義序列化邏輯,這在需要處理敏感資料或進行額外的資料轉換時非常有用。

    Java 提供了豐富的工具來處理文件 I/O 操作,從傳統的字元流、位元流到現代的非阻塞 I/O 模型。NIO 更適合高性能應用程序,特別是在多連線的情況下。此外,序列化讓 Java 的物件可以被輕鬆儲存和傳輸,透過 Serializable介面和相關工具類,我們能夠靈活地管理物件的序列化過程。


上一篇
Java進階語法-4
下一篇
Java進階語法-6
系列文
Java程式實作30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言