首选System.lineSeparator()以用Java编写系统相关的行分隔符字符串
JDK 7在java.lang.System類上引入了一個(gè)名為lineSeparator()的新方法。 該方法不期待任何參數(shù),并返回一個(gè)String ,它表示“取決于系統(tǒng)的行分隔符字符串。” 此方法的Javadoc文檔還指出System.lineSeparator() “始終返回相同的值– 系統(tǒng)屬性 line.separator的初始值?!?進(jìn)一步說明:“在UNIX系統(tǒng)上,它返回“ \n ”; 在Microsoft Windows系統(tǒng)上,它返回“ \r\n ”。
既然Java開發(fā)人員長期以來一直能夠使用System.getProperty(“ line.separator”)來獲取該與系統(tǒng)相關(guān)的行分隔符值,那么為什么那個(gè)Java開發(fā)人員現(xiàn)在更喜歡使用System.lineSeparator ? JDK-8198645 [“使用System.lineSeparator()代替getProperty(“ line.separator”)”]提供了一些在其“描述”中偏愛System.lineSeparator()而不是System.getProperty(String)方法的原因:
基本模塊中的許多類都使用System.getProperty(“ line.separator”),并且可以使用效率更高的System.lineSeparator()簡化代碼并提高性能。
正如JDK-8198645中的“描述”所述,與System.getProperty("line.separator")相比,使用System.lineSeparator()更簡單,更高效。 core-libs-dev郵件列表上的最近一條消息提供了更多詳細(xì)信息,Roger Riggs在該消息中寫道System.lineSeparator() “使用System中的行分隔符,而不是每次都在屬性中查找它?!?
在許多情況下,與使用System.getProperty("line.separator") ,使用System.lineSeparator()的性能優(yōu)勢可能并不那么重要。 但是,鑒于其簡單性,在編寫更簡單的代碼時(shí)沒有理由不獲得性能上的好處(即使在許多情況下很小且很難測量)。 System.getProperty(String)方法的缺點(diǎn)之一是必須確保將完全匹配的屬性名稱提供給該方法。 使用基于String的API時(shí),總是存在將字符串拼寫錯(cuò)誤的風(fēng)險(xiǎn)(我見過“ sep a rator”多次拼寫為“ sep e rator”),使用了錯(cuò)誤的大小寫,或者不小心引入了其他拼寫錯(cuò)誤,從而阻止了精確匹配被制造。
在JDK 7中引入了此功能的JDK問題JDK-6900043 (“添加方法返回line.separator屬性”),在其“說明”中也闡明了一些好處:“查詢line.separator值在以下情況中很常見。大型系統(tǒng)。 正確執(zhí)行此操作很冗長,并且可能會(huì)導(dǎo)致安全性失敗; 讓方法返回該值將是有益的。” 重復(fù)的JDK-6264243 (“ File.lineSeparator()以檢索常用的'line.separator'系統(tǒng)屬性的值”)詳細(xì)說明了此方法的優(yōu)點(diǎn),并列出了“正確性”,“性能”和“易用性”。使用和跨平臺(tái)開發(fā)”作為高級(jí)優(yōu)勢。 另一個(gè)重復(fù)的問題, JDK-6529790 (“請將LINE_SEPARATOR常數(shù)添加到System或其他類中”)指出,應(yīng)該以某種方式向“某些標(biāo)準(zhǔn)Java類(如String或System)中添加” constant”。與File.pathSeparator為文件分隔符提供的內(nèi)容相似 。
與JDK 7 System.lineSeparator()引入相關(guān)的消息之一用以下描述證明了其補(bǔ)充:
許多類都需要使用System.getProperty("line.separator") 。 許多做法不正確,因?yàn)槊慨?dāng)讀取系統(tǒng)屬性時(shí)都需要使用doPrivileged塊。 但這不是秘密-即使您對安全管理器不信任,也可以區(qū)分行分隔符。
與在JDK 7中添加System.lineSeparator()有關(guān)的一個(gè)有趣的旁注是,當(dāng)時(shí)的Javadoc并未表明該方法是JDK 7的新功能。JDK-7082231 (“在System.lineSeparator上輸入@since 1.7) ”)在JDK 8中解決了此問題,另外兩個(gè)JDK問題( JDK-8011796和JDK-7094275 )表明,這是多個(gè)Java開發(fā)人員所希望的。
System.lineSeparator()的引入是一個(gè)很小的增強(qiáng),但是它確實(shí)提高了相對常用的API的安全性和可讀性,同時(shí)并沒有降低(實(shí)際上是在提高)性能。
翻譯自: https://www.javacodegeeks.com/2018/02/prefer-system-lineseparator-writing-system-dependent-line-separator-strings-java.html
總結(jié)
以上是生活随笔為你收集整理的首选System.lineSeparator()以用Java编写系统相关的行分隔符字符串的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 利用2台路由器进行联网如何2条网线共用一
- 下一篇: 有看投电脑版官网下载(有看投网页版)