首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> Delphi

Delphi JSON 庫 DJSON 開發日誌:JSONTokener 移植挑戰與對策(上)

     編輯:Delphi

本文記錄作者將 JSON.org 官方 Java 版 JSONTokener 移植至 Delphi 過程中遇到的語言層級差異、設計抉擇與解決方案。這不只是程式碼翻譯,更是跨語言運行時模型的適配實戰。

主要移植挑戰

1. 記憶體管理:GC vs. 手動/智慧指標

Java 依賴垃圾回收,物件生命週期無需操心。Delphi 無 GC,若直接 Create 物件極易洩漏。作者引入 智慧指標(IAutoPtr<TObject>)模擬參考計數,所有 Token 解析產出的值物件(TStringObject、TBooleanObject 等)皆以介面形式回傳,離開作用域自動釋放。

2. 基本型別包裝:Java 有,Delphi 無

Java 提供 Boolean、Integer、Long、Double 等包裝類別,可直接放入集合、多型處理。Delphi 基本型別非物件。作者依樣畫葫蘆建立 TBooleanObject、TIntegerObject、TLongObject、TDoubleObject 等包裝類別,並提供單例常數(如 TBooleanObject.TRUE),完美對應 Java 語意。

3. 語法範式切換:C 風 vs. Pascal 風

  • 索引從 0 起 vs. 字串 1-based(Delphi 字串 1-based,但作者維持 0-based 索引以貼近原始碼邏輯)。
  • switch → case,StringBuffer → string 連接或 TStringBuilder。
  • 異常處理:throws → raise,自訂 EJSONException。

原始 Java 碼對照

文中完整貼出 org.json.JSONTokener Java 原始碼(第 1-463 行),包含:

  • 建構子、back、dehexchar、more、next 多載
  • nextClean:跳過空白與註釋(//, /*, #)
  • nextString:支援 \uXXXX、\xXX 跳脫
  • nextTo、nextValue:核心解析分派
  • 數值解析級聯:Integer → Long → Double → String
  • skipTo、skipPast、syntaxError、toString

作者心聲與動機

「現在用 Delphi 的人不多,原因有兩點:1. 公司管理層問題。2. 成熟庫太少。既然第一點無法挽回,就讓我們在第二點上努力吧!」

這句話道出了開源庫建設的現實意義:彌補生態缺口,降低技術遷移門檻。

移植策略總結

Java 特性Delphi 對策
垃圾回收智慧指標介面 IAutoPtr
基本型別包裝類自建 T*Object 階層
多型集合介面型別 IAutoPtr<TObject>
StringBuilder字串連接 / TStringBuilder
Unicode 字串Delphi 2009+ 原生 Unicode

後續規劃

完成 JSONTokener 後,將依序實作 JSONObject、JSONArray、JSONWriter 等單元,構建完整 DJSON 庫,支援 Delphi 2009 以上版本。

此系列不僅提供可用程式碼,更展示了資深開發者跨語言移植核心庫的思維路徑與工程權衡。

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