真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

如何在java項(xiàng)目中使用字符串與數(shù)字的性能

這期內(nèi)容當(dāng)中小編將會(huì)給大家?guī)?lái)有關(guān)如何在java項(xiàng)目中使用字符串與數(shù)字的性能,文章內(nèi)容豐富且以專業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

發(fā)展壯大離不開廣大客戶長(zhǎng)期以來(lái)的信賴與支持,我們將始終秉承“誠(chéng)信為本、服務(wù)至上”的服務(wù)理念,堅(jiān)持“二合一”的優(yōu)良服務(wù)模式,真誠(chéng)服務(wù)每家企業(yè),認(rèn)真做好每個(gè)細(xì)節(jié),不斷完善自我,成就企業(yè),實(shí)現(xiàn)共贏。行業(yè)涉及成都封陽(yáng)臺(tái)等,在重慶網(wǎng)站建設(shè)公司、營(yíng)銷型網(wǎng)站建設(shè)、WAP手機(jī)網(wǎng)站、VI設(shè)計(jì)、軟件開發(fā)等項(xiàng)目上具有豐富的設(shè)計(jì)經(jīng)驗(yàn)。

對(duì)于大數(shù)據(jù)處理來(lái)說(shuō),從字符串替換為數(shù)字類型,可以極大地節(jié)省內(nèi)存、磁盤存儲(chǔ)以及網(wǎng)絡(luò)帶寬,減少IO的代價(jià),而且很多數(shù)據(jù)結(jié)構(gòu)和算法使用數(shù)字類型比字符串要更快。

我們來(lái)看一個(gè)例子,假設(shè)你有很多的日志需要處理,而每條日志都有一個(gè)唯一的標(biāo)識(shí),標(biāo)識(shí)類似這樣的格式:

F5051582611729507844
3832154813577306424
F1624235934976711017
3810376634214027595
F6884923813121317381
7278044081826528150

看到這些標(biāo)識(shí),你怎么想?我的第一反應(yīng)應(yīng)該是數(shù)字,可是怎么有個(gè)F呢?我想可以把它當(dāng)做16進(jìn)制。后來(lái)發(fā)現(xiàn)可以把F當(dāng)做負(fù)號(hào),這就是一個(gè)64位的長(zhǎng)整型。

那么如果你把這些標(biāo)識(shí)當(dāng)成字符串,會(huì)有什么不同呢?

當(dāng)然有,如果你每秒要處理這樣的日志百萬(wàn)或者千萬(wàn)條,每條處理結(jié)果可能會(huì)包含百萬(wàn)或者千萬(wàn)個(gè)這樣的標(biāo)識(shí)元素構(gòu)成的集合,這個(gè)不同就會(huì)體現(xiàn)的非常明顯。

下面,我們來(lái)分析一下標(biāo)識(shí)3832154813577306424的存儲(chǔ)占用情況:

1、內(nèi)存占用

當(dāng)做字符串:我們知道,JAVA中字符串是由字符構(gòu)成的,一個(gè)字符是由2個(gè)字節(jié)構(gòu)成的(這是JAVA的悲劇了),上述標(biāo)識(shí)有19個(gè)字符,所以,占用的內(nèi)存大小為:19*2+4=42(字節(jié)),+4是因?yàn)樽址褂靡粋€(gè)整型保存字符串的哈希值。

當(dāng)做數(shù)字:如當(dāng)做長(zhǎng)整型,則占用的內(nèi)存大小為8字節(jié)。

這里有5倍以上的差距了吧。

2、序列化字節(jié)大小

當(dāng)我們需要通過(guò)網(wǎng)絡(luò)傳輸這些標(biāo)識(shí)或者需要把這些標(biāo)識(shí)存儲(chǔ)到磁盤中的時(shí)候,我們就需要把這些標(biāo)識(shí)轉(zhuǎn)換為字節(jié)數(shù)組,如何轉(zhuǎn)換為字節(jié)數(shù)組呢?我們可以使用多種編碼方式。

當(dāng)做字符串:我們知道,JAVA中字符串轉(zhuǎn)換為字節(jié)數(shù)組可以使用多種編碼方式,我們看看常見(jiàn)的編碼方式對(duì)如上字符串編碼之后的字節(jié)數(shù):

String abc = "3832154813577306424";

System.out.println("3832154813577306424 length:"+abc.length());
System.out.println(Charset.defaultCharset().name()+":"+abc.getBytes().length);
System.out.println("unicode:"+abc.getBytes("unicode").length);
System.out.println("gbk:"+abc.getBytes("gbk").length);
System.out.println("gb2312:"+abc.getBytes("gb2312").length);
System.out.println("ISO-8859-1:"+abc.getBytes("ISO-8859-1").length);

輸出如下:

3832154813577306424 length:19
UTF-8:19
unicode:40
gbk:19
gb2312:19
ISO-8859-1:19

當(dāng)做數(shù)字:如當(dāng)做長(zhǎng)整型,則占用的內(nèi)存大小為8字節(jié)。

這里有2倍以上的差距了吧。

那么我們?nèi)绾卧陂L(zhǎng)整型和字節(jié)數(shù)組之間轉(zhuǎn)換呢?

String abc = "3832154813577306424";

System.out.println("3832154813577306424 length:"+abc.length());
System.out.println("long:"+ByteUtils.longToBytes(Long.parseLong(abc)).length);
byte[] bytes = ByteUtils.longToBytes(Long.parseLong(abc));
System.out.println("string:"+ByteUtils.bytesToLong(bytes));

輸出如下:

3832154813577306424 length:19
long:8
string:3832154813577306424
public static byte[] longToBytes(long x) {
  ByteBuffer longBuffer = ByteBuffer.allocate(Long.BYTES);
  longBuffer.putLong(0, x);
  return longBuffer.array();
}
public static long bytesToLong(byte[] bytes) {
  return bytesToLong(bytes, 0, bytes.length);
}
public static long bytesToLong(byte[] bytes, int offset, int length) {
  ByteBuffer longBuffer = ByteBuffer.allocate(Long.BYTES);
  longBuffer.put(bytes, offset, length);
  longBuffer.flip();//need flip
  return longBuffer.getLong();
}

上述就是小編為大家分享的如何在java項(xiàng)目中使用字符串與數(shù)字的性能了,如果剛好有類似的疑惑,不妨參照上述分析進(jìn)行理解。如果想知道更多相關(guān)知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。


新聞名稱:如何在java項(xiàng)目中使用字符串與數(shù)字的性能
標(biāo)題來(lái)源:http://weahome.cn/article/gpspic.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部