首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

關於 Java 常用工具類你不知道的 5 件事(第 2 部分)

     編輯:Java 相關知識

Java 平台蘊藏著許多鮮為人知但極其實用的工具類,如同廚房抽屜裡的「小線頭」,關鍵時刻能解決大問題。本文介紹 StAX、ServiceLoader、Scanner、Timer、JavaSound 五大隱藏寶石。

1. StAX:流式 XML 處理的最佳平衡點

SAX 太底層、DOM 太佔記憶體,StAX(Streaming API for XML)提供「拉取式」解析:將文檔建模為可逐個提取的節點流,一次處理一個,用完即丟棄。JDK 內建於 javax.xml.stream。

核心用法

XMLEventReader reader = XMLInputFactory.newInstance()
    .createXMLEventReader(new FileReader("build.xml"));
while (reader.hasNext()) {
    XMLEvent evt = reader.nextEvent();
    if (evt.getEventType() == XMLEvent.START_ELEMENT) {
        StartElement se = evt.asStartElement();
        if ("target".equals(se.getName().getLocalPart())) {
            System.out.println(se.getAttributeByName(new QName("name")).getValue());
        }
    }
}

適用場景:大型 XML、無需完整樹結構、記憶體敏感環境。另提供 XMLStreamReader 低階 API 及 XMLEventWriter/XMLStreamWriter 輸出支援。

2. ServiceLoader:零依賴的 SPI 機制

標準化的「介面與實現分離」方案,輕於 Spring。讀取 JAR 中 META-INF/services/全限定介面名 文件,自動發現並實例化實現類。

三步驟使用

  1. 定義介面:IPersonalServant 含 can(String)、process(File)
  2. 實現類:Jeeves implements IPersonalServant
  3. 配置服務文件:META-INF/services/IPersonalServant 內容為 Jeeves

Ant 1.7+ <service> 標籤可自動生成服務文件。ServiceLoader.load(介面.class) 返回可迭代的實現列表,支援動態擴展。

3. Scanner:輕量級結構化文本解析器

介於 String.split() 過弱與完整解析器框架過重之間。支援按分隔符、正則、類型安全讀取(nextInt()、nextDouble() 等)。

解析 DSL 指令示例

Scanner scanner = new Scanner(commandFile);
while (scanner.hasNext()) {
    String verb = scanner.next();
    if ("fetch".equals(verb)) {
        int num = scanner.nextInt();
        String type = scanner.next();
        fetch(num, type);
    } else if ("attach".equals(verb)) { ... }
}

適合 CSV、日誌、簡易 DSL、配置文件解析,API 簡潔直觀。

4. Timer:簡單可靠的任務排程

java.util.Timer + TimerTask 提供一次性/週期性延遲執行,比手寫 Thread 簡單,比 ScheduledExecutorService 輕量。

Timer t = new Timer("TimerThread");
t.schedule(new TimerTask() {
    public void run() { System.out.println("This is later"); }
}, 1000); // 1秒後執行

注意:預設建立非守護線程,長期運行程式建議用 new Timer(true) 建立守護線程,避免阻止 JVM 退出。

5. JavaSound:程式發聲的輕量方案

javax.sound.* 支援 MIDI 與音頻(WAV 等)。播放片段核心流程:

  1. AudioSystem.getAudioInputStream() 獲取音頻流
  2. AudioSystem.getLine() 獲取 Clip
  3. 註冊 LineListener 處理 STOP 事件(修復 JDK 5 短片段無聲 Bug)
  4. clip.open() → clip.start() → clip.drain() → clip.close()

適用場景:監控告警聲、桌面應用交互反饋、測試輔助提示。服務端慎用。

結語

這五個工具類無需額外依賴,即開即用。下次遇到 XML 處理、模組發現、文本解析、定時任務、聲音播放需求時,先看看 JDK 自帶能否解決,往往事半功倍。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved