01 訂閱鏈接轉yaml格式校驗java(Java回編譯時出錯,速求大神看看出錯在哪里!)

时间:2024-05-14 07:16:46 编辑: 来源:

超越XML和JSON:YAML,Java開發人員的新選擇

為Java開發者對YAML文件格式做一個高級介紹 找出它與XML和JSON的不同之處 并檢驗它的優越性和缺陷

所有動態語言(如Ruby Groovy Python等)及其相關的框架(如Ruby on rails)百家爭鳴 盡管閱讀本文的大部分Java開發者每天的大多數工作都是處理純粹的Java 且未來多年都將如此 但這并不意味著他們不能學習新的知識 在他們的兵器庫中添加新的兵器 本文介紹YAML(YAML不是標記語言的簡寫)文件格式(使用Ruby on rails框架進行講解 因為它所有的配置文件都是使用的YAML)以及它與XML和JSON的區別 最后討論了YAML的優勢和缺點

空格縮進和JSON選項

YAML文件格式主要集中于空格縮進的概念 它用于指出數據的層次結構 – 而不是使用XML嵌套標記或JSON的大括號({ })和方括號([]) 實際上 它是JSON的一個超集 因此 在使用的時候 你可能需要采用JSON風格的語法來跳出空格流 它的創始人將其形容為 為所有編程語言提供人性化的數據序列化標準 以我的經驗來看 其重點是人性化 下面是一個使用空格縮進的YAML樣例 創建YAML文件時不宜使用固定寬度字體 因為空格是很關鍵的 (參考側邊欄 YAML和標簽

JFrame: defaultCloseOperation: JFrame EXIT_ON_CLOSE title: Test Frame width: height: ponents: JTextArea: name: textArea text: | This is a really long text that spans multiple lines (but preserves new lines) It does not need to be escaped with special brackets CDATA tags or anything like that JButton: name: button text: Button

側邊欄 YAML和標簽     基于空格縮進的任一文件格式最常見的問題之一是如何解釋標簽 在這個YAML例子中 答案相當簡單 它不支持標簽 使用標簽字符縮進代替空格將會導致處理異常

隨你喜歡 你可以在任何節點使用JSON風格語法或混合語法 例如 上面的例子可改為

JFrame: defaultCloseOperation: JFrame EXIT_ON_CLOSE title: Test Frame width: height: ponents: JTextArea: name: textArea text: | This is a really long text that spans multiple lines (but preserves new lines) It does not need to be escaped with special brackets CDATA tags or anything like that JButton: { name: button text: Button } #JSON風格語法

在底層節點(即它們沒有子節點 正如你猜測的那樣 井號鍵在YAML中是用來注釋的)切換使用JSON風格語法顯得特別有用

YAML結構組件

前面已經看了一個簡單的YAML例子 下面讓我們一起來了解一下YAML的結構 hash list 和block literal

hash(散列)

通過縮進子段和在關鍵字與值之間使用冒號(:)來分割實現hash的創建 如

JFrame: defaultCloseOperation: JFrame EXIT_ON_CLOSE title: Test Frame width: height:

還有一種方法就是使用與JSON兼容的大括號語法({ })語法 每一對關鍵字/值使用逗號( )分割 如

JFrame: { defaultCloseOperation: JFrame EXIT_ON_CLOSE title: Test Frame

width: height: }

list(清單)

通過在每個list元素前放一個減號( )來創建list 與空格縮進一起構成了YAML的基石

ponents: JTextArea Jbutton

還有一種方法就是使用JSON兼容的方括號([])語法 如

ponents: [JTextArea JButton]

block literal(文字塊)

這是YAML的亮點 特別是與XML相比 它的CDATA顯得相當簡陋 block literal可以將大塊文本細致地插入文件中 你可以使用豎線(|)指令在你的文本中保留新行 如

text: | This is a really long text that spans multiple lines (but preserves new lines) It does not need to be escaped with special brackets CDATA tags or anything like that

YAML編譯器將會從第一行的第一個文本字符開始編譯(并丟掉所有的縮進空格) 但是會在你的文本中保留新行

另外 你還可以使用大于符號(>)告訴YAML編譯器給所有新行加上條紋 并將輸入的文本作為一個長行處理

text: > This is a really long text that spans multiple lines (but preserves new lines) It does not need to be escaped with special brackets CDATA tags or anything like that

除了這兩個指令之外 你還可以使用豎線和加號(|+) 它給位于前面的空格加上條紋 保留新行和末尾的空格 還可以使用大于號和減號(> ) 它給所有的空格加上條紋

YAML VS XML和JSON

正如你從前面例子中清楚地看到那樣 YAML沒有XML那么啰嗦了 大部分YAML文件內容就是真實的數據 沒有了無窮盡的打開和關閉標記列表 在XML中 這些標記往往比它們描述的數據還大 YAML更適合你需要手工維護的數據文件類型

YAML沒有提供方案或DTD概念 因此無法驗證文件格式是否符合你的預期 XML的啰嗦也有它的價值 但總的說來是因為XML的成熟使它具有大量額外的工具來驗證它的格式 而YAML還沒有

JSON也適合與任何數據 它主要面向提高性能和文件尺寸的大小 因為它幾乎不使用空格和關閉標簽 然而 JSON文件的內容增加了復雜性 它的關閉標識就象下地獄一樣 這就是JavaFx代碼(它基于JSON)中可見的最痛苦的了 在數據文件中 使用UI結構使結果更復雜 其復雜程度幾乎使文件變得無法理解

查看的JavaFx示例代碼(點擊 Edit this page 鏈接) 請特別留心它是如何結束的

} } } } ] } } center: bookPanel }

摻和了{ }結構和[]清單 使得手工維護大型的JSON風格的文件變得相當困難 YAML使用它的空格縮進方法巧妙地解決了這個問題 當然 無論何時 你都可以切換到JSON風格的語法(如在底層節點)

解析YAML文件最常用的Java庫是JvYAML() JRuby(在Java VM上運行動態語言的Ruby版本)在它的Ruby on Rails框架中的進出口使用JvYAML JvYAML提供了文件一般處理的功能(在前面那個例子中 它返回了一個標準Java字符串 Long Map和List對象的嵌套體系結構) 使用靜態mp()方法保存為文件 然后使用靜態load()方法載入 例如

YAML mp(Object data Writer output); Object data = YAML load(Reader io);

參考側邊欄 基于YAML的開源項目了解關于基于YAML的開源項目信息 以及如何在Java中裝入一個說明的UI

側邊欄 基于YAML的開源項目     請原諒我在這里厚臉皮地介紹我們自己的開源項目 當我真的不知道除了JRuby外其他的基于YAML的開源項目 JRuby的Ruby on Rails框架實現嚴重依賴YAML 而不是XML或JSON 看看我的Java Builder庫吧() 它利用YAML文件提供了一種方法定義屏幕控制 布局 事件線路和數據綁定 以實現將說明UI裝入Java

實際上 YAML文件真的非常簡單 甚至你可以使用任何的文本編輯器都可以維護它 但有些專門的文本編輯器提供了語法加亮功能 這對維護工作很有幫助 對Eclipse而言 有Eclipse YAML editor() 對NetBeans而言 你可以使用來自Ruby包()的YAML編輯器 然而 在NetBeans 中的YAML編輯器并沒有什么用處 它只支持YAML很小的一個子集(例如 它不支持block literal) 希望在NetBeans 中的YAML編輯器解決了這個問題

我沒有機會測試IntelliJ IDEA 但我推測它的Ruby on Rails插件(+IDEA+Ruby+Plugin)附帶了YAML編輯器

添加YAML工具

lishixin/Article/program/Java/JSP/201311/19416

Java回編譯時出錯,速求大神看看出錯在哪里!

java.nio.charset.MalformedInputException

從異常來看應該似乎是字符編碼的問題 : charset

你可以參考

買粉絲://blog.sina.買粉絲.買粉絲/s/blog_49e44eb001019qmi.買粉絲

搜索关键词: