亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

java中String和byte數(shù)組轉(zhuǎn)換的小技巧

CastlePeaK / 1863人閱讀

摘要:今日看公司代碼時(shí)發(fā)現(xiàn),在和數(shù)組轉(zhuǎn)換的過程中,大量的無聊。所以寫了本文,作一個(gè)基本編程知識(shí)的小科普。分享一個(gè)編程的小技巧,簡單實(shí)用。而最要命的是,是繼承自類。

今日看公司代碼時(shí)發(fā)現(xiàn),在string和byte數(shù)組轉(zhuǎn)換的過程中,大量的無聊try catch。所以寫了本文,作一個(gè)java基本編程知識(shí)的小科普。

分享一個(gè)java編程的小技巧,簡單實(shí)用。

建議
其實(shí)內(nèi)容就一句話:

在做String和byte[]的相互轉(zhuǎn)換時(shí),請(qǐng)使用StandardCharsets.UTF_8來替代”utf-8”

解釋一下,通常我們代碼是這樣寫:

String string = new String(bytes, "utf-8");
byte[] bytes = string.getBytes("utf-8");

請(qǐng)換成下面這個(gè)寫法:

String string = new String(bytes, StandardCharsets.UTF_8);
byte[] bytes = string.getBytes(StandardCharsets.UTF_8);

注: 其實(shí)大家看到這里就可以打住了

問題解釋
第一個(gè)寫法功能當(dāng)然沒問題,但是代碼寫完之后,IDE一定會(huì)立刻提醒你,這里會(huì)拋出UnsupportedEncodingException。

而最要命的是,UnsupportedEncodingException是繼承自類Exceptio。

這是一個(gè)checked exception, 這是一個(gè)checked exception, 這是一個(gè)checked exception!

JDK的源代碼如下:

public String(byte bytes[], String charsetName)
        throws UnsupportedEncodingException {
    this(bytes, 0, bytes.length, charsetName);
}

這意味著我們要不加上try catch,要不就要在方法上顯示申明要拋出異常。
而申明拋出UnsupportedEncodingException異常絕對(duì)不是一個(gè)好注意,鬼都知道這里這個(gè)UTF-8一定不會(huì)
unsupported,把這個(gè)麻煩扔給調(diào)用者絕對(duì)是一個(gè)不負(fù)責(zé)任的行為。

所以我在代碼中看到大量的類似代碼:

try {
    String json = new String(data, "utf-8");
    // 此處略去××字
} catch (UnsupportedEncodingException e) {
    e.printStackTrace();
}

解決方法
這個(gè)問題由來已久,java社區(qū)解決這個(gè)問題的方式也很早就有,沒有記錯(cuò)的話 apache commons大概十年前就提供了
方案,注意jdk中提供的另外一個(gè)不拋UnsupportedEncodingException的構(gòu)造函數(shù):

public String(byte bytes[], Charset charset) {
    this(bytes, 0, bytes.length, charset);
}

和前一個(gè)構(gòu)造函數(shù)的差別就是這里直接輸入了Charset對(duì)象,不需要做一次從string到Charset
的轉(zhuǎn)化(這里才是UnsupportedEncodingException拋出的根源)。而我們?nèi)粘R玫降腸harset是非常
有限的,因此只要簡單列常來最常用的幾個(gè)就好了。

JDK7之后,java引入了java.nio.charset.StandardCharsets來做charset預(yù)定義:

public final class StandardCharsets {
    public static final Charset US_ASCII = Charset.forName("US-ASCII");
    public static final Charset ISO_8859_1 = Charset.forName("ISO-8859-1");
    public static final Charset UTF_8 = Charset.forName("UTF-8");
    ......
}

在jdk之前,很多基本類庫都提供類似的功能,比如大家熟悉的apache commons,這個(gè)是最早提供也是用的最多的的:

org.apache.commons.codec.Charsets

    /**
     * @see Standard charsets
     * @deprecated Use Java 7"s {@link java.nio.charset.StandardCharsets}
     */
    @Deprecated
    public static final Charset UTF_8 = Charset.forName(CharEncoding.UTF_8);

注意上面的注釋,現(xiàn)在apache已經(jīng)Deprecated 它了,建議大家用StandardCharsets。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/69329.html

相關(guān)文章

  • 1、轉(zhuǎn)換流 2、緩沖流

    摘要:字符轉(zhuǎn)換流原理字節(jié)流編碼表。和作為子類,僅作為操作字符文件的便捷類存在。源目的先根據(jù)需求明確要讀,還是要寫。屏幕網(wǎng)絡(luò)完全可以明確具體要使用哪個(gè)流對(duì)象。明確四是否需要額外功能呢額外功能轉(zhuǎn)換嗎轉(zhuǎn)換流。高效嗎緩沖區(qū)對(duì)象。 01轉(zhuǎn)換流概述 * A: 轉(zhuǎn)換流概述 * a: 轉(zhuǎn)換流概述 * OutputStreamWriter 是字符流通向字節(jié)流的橋梁:可使用指定的字符編碼...

    sf190404 評(píng)論0 收藏0
  • String類基礎(chǔ)的那些事!

    摘要:第三階段常見對(duì)象的學(xué)習(xí)第一章常見對(duì)象類一類的概述及其構(gòu)造方法概述多個(gè)字符組成的一串?dāng)?shù)據(jù),例如也可以看成是一個(gè)字符數(shù)組。 第三階段 JAVA常見對(duì)象的學(xué)習(xí) 第一章 常見對(duì)象——String類 (一) String 類的概述及其構(gòu)造方法 (1) 概述 多個(gè)字符組成的一串?dāng)?shù)據(jù),例如 abc 也可以看成是一個(gè)字符數(shù)組。 而通過 API我們又可以知道 A:字符串字面值abc也可以看成是一個(gè)字符串...

    30e8336b8229 評(píng)論0 收藏0
  • underscore的小技巧

    摘要:在閱讀的過程中,發(fā)現(xiàn)了它的一些小技巧,對(duì)我們平時(shí)的編程很有用。事實(shí)上,在上也的確是可以被更改的而在或高版本的中,并不能更改全局的。但是,局部的仍然可以被改變。所以,建議在已知長度的情況下,使用第一種,而不知道長度的情況下,使用第二種。 在閱讀 underscore 的過程中,發(fā)現(xiàn)了它的一些小技巧,對(duì)我們平時(shí)的編程很有用。在這里向大家介紹一二 void 0 代替 underfined 首...

    lifesimple 評(píng)論0 收藏0
  • JS 經(jīng)常使用的小技巧,助你更簡短的實(shí)現(xiàn)一些功能

    摘要:第二個(gè)問題非基礎(chǔ)類型則不好處理,其實(shí)像這種比較的方法,往往不是用于處理普遍情況的,往往是在特殊場景發(fā)揮奇效的。沒有最好的方案,只有最合適的方案。這樣才能使得正數(shù)和負(fù)數(shù)的表示統(tǒng)一起來,具體可以參閱補(bǔ)碼的歷史,這里不過多展開了。 原文: https://github.com/HCThink/h-... github 首頁(star+watch,一手動(dòng)態(tài)直達(dá)): https://gith...

    ChristmasBoy 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<