欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

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

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

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

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

我們來看一個例子,假設你有很多的日志需要處理,而每條日志都有一個唯一的標識,標識類似這樣的格式:

F5051582611729507844
3832154813577306424
F1624235934976711017
3810376634214027595
F6884923813121317381
7278044081826528150

看到這些標識,你怎么想?我的第一反應應該是數(shù)字,可是怎么有個F呢?我想可以把它當做16進制。后來發(fā)現(xiàn)可以把F當做負號,這就是一個64位的長整型。

那么如果你把這些標識當成字符串,會有什么不同呢?

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

下面,我們來分析一下標識3832154813577306424的存儲占用情況:

1、內(nèi)存占用

當做字符串:我們知道,JAVA中字符串是由字符構(gòu)成的,一個字符是由2個字節(jié)構(gòu)成的(這是JAVA的悲劇了),上述標識有19個字符,所以,占用的內(nèi)存大小為:19*2+4=42(字節(jié)),+4是因為字符串使用一個整型保存字符串的哈希值。

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

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

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

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

當做字符串:我們知道,JAVA中字符串轉(zhuǎn)換為字節(jié)數(shù)組可以使用多種編碼方式,我們看看常見的編碼方式對如上字符串編碼之后的字節(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

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

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

那么我們?nèi)绾卧陂L整型和字節(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項目中使用字符串與數(shù)字的性能了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關(guān)知識,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。

本文名稱:如何在java項目中使用字符串與數(shù)字的性能
網(wǎng)站網(wǎng)址:http://www.chinadenli.net/article2/gpspic.html

成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站制作ChatGPT企業(yè)網(wǎng)站制作軟件開發(fā)全網(wǎng)營銷推廣網(wǎng)站設計

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

微信小程序開發(fā)