關(guān)于Java中byte[]?和?String互相轉(zhuǎn)換問題
通過用例學(xué)習(xí)Java中的byte數(shù)組和String互相轉(zhuǎn)換,這種轉(zhuǎn)換可能在很多情況需要,比如IO操作,生成加密hash碼等等。
除非覺得必要,否則不要將它們互相轉(zhuǎn)換,他們分別代表了不同的數(shù)據(jù),專門服務(wù)于不同的目的,通常String代表文本字符串,byte數(shù)組針對二進(jìn)制數(shù)據(jù)
通過String類將String轉(zhuǎn)換成byte[]或者byte[]轉(zhuǎn)換成String
用String.getBytes()方法將字符串轉(zhuǎn)換為byte數(shù)組,通過String構(gòu)造函數(shù)將byte數(shù)組轉(zhuǎn)換成String
注意:這種方式使用平臺默認(rèn)字符集
package com.bill.example; public class StringByteArrayExamples { public static void main(String[] args) { //Original String String string = "hello world"; //Convert to byte[] byte[] bytes = string.getBytes(); //Convert back to String String s = new String(bytes); //Check converted string against original String System.out.println("Decoded String : " + s); } }
輸出:
hello world
通過Base64將String轉(zhuǎn)換成byte[]或者byte[]轉(zhuǎn)換成String[Java 8]
可能你已經(jīng)了解 Base64 是一種將二進(jìn)制數(shù)據(jù)編碼的方式,正如UTF-8和UTF-16是將文本數(shù)據(jù)編碼的方式一樣,所以如果你需要將二進(jìn)制數(shù)據(jù)編碼為文本數(shù)據(jù),那么Base64可以實(shí)現(xiàn)這樣的需求
從Java 8 開始可以使用Base64這個類
import java.util.Base64; public class StringByteArrayExamples { public static void main(String[] args) { //Original byte[] byte[] bytes = "hello world".getBytes(); //Base64 Encoded String encoded = Base64.getEncoder().encodeToString(bytes); //Base64 Decoded byte[] decoded = Base64.getDecoder().decode(encoded); //Verify original content System.out.println( new String(decoded) ); } }
輸出:
hello world
總結(jié)
在byte[]和String互相轉(zhuǎn)換的時候你應(yīng)該注意輸入數(shù)據(jù)的類型
- 當(dāng)使用String類的時候,將String作為輸入類型
- 當(dāng)使用Base64類的時候,使用byte數(shù)組作為輸入類型
補(bǔ)充:下面看下java的byte[]與String相互轉(zhuǎn)換
String轉(zhuǎn)byte[]
byte[] sInput = new byte[0]; try { ? ? // 可以指定編碼,默認(rèn)也只UTF-8 ? ? sInput = "這是內(nèi)容".getBytes("UTF-8"); } catch (UnsupportedEncodingException e) { ? ? e.printStackTrace(); }
byte[]轉(zhuǎn)String
// 這里sInput是上面byte[],也是可以指定編碼,默認(rèn)也是UTF-8 String str = new String(sInput, "UTF-8")
byte[]打印到控制臺看
org.bouncycastle.pqc.math.linearalgebra.ByteUtils.toBinaryString(sInput) // 這個方法的源碼 ? ? public static String toBinaryString(byte[] var0) { ? ? ? ? String var1 = ""; ? ? ? ? for(int var2 = 0; var2 < var0.length; ++var2) { ? ? ? ? ? ? byte var3 = var0[var2]; ? ? ? ? ? ? for(int var4 = 0; var4 < 8; ++var4) { ? ? ? ? ? ? ? ? int var5 = var3 >>> var4 & 1; ? ? ? ? ? ? ? ? var1 = var1 + var5; ? ? ? ? ? ? } ? ? ? ? ? ? if (var2 != var0.length - 1) { ? ? ? ? ? ? ? ? var1 = var1 + " "; ? ? ? ? } ? ? ? ? return var1; ? ? }
到此這篇關(guān)于Java中byte[] 和 String互相轉(zhuǎn)換的文章就介紹到這了,更多相關(guān)java byte[] 和 String互相轉(zhuǎn)換內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
JAVA中使用JSON進(jìn)行數(shù)據(jù)傳遞示例
本篇文章主要介紹了JAVA中使用JSON進(jìn)行數(shù)據(jù)傳遞示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-01-01Java中instanceof關(guān)鍵字實(shí)例講解
大家好,本篇文章主要講的是Java中instanceof關(guān)鍵字實(shí)例講解,感興趣的同學(xué)趕快來看一看吧,對你有幫助的話記得收藏一下2022-01-01maven-assembly-plugin報紅無法加載報錯:Plugin?‘maven-assembly-plugin
maven-assembly-plugin是一個常用的打包插件,但是在使用過程中經(jīng)常會遇到各種報錯,本文就來介紹一下maven-assembly-plugin報紅無法加載報錯,具有一定的參考價值2023-08-08java-collection中的null,isEmpty用法
這篇文章主要介紹了java-collection中的null,isEmpty用法,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-02-02Java并發(fā)編程之柵欄(CyclicBarrier)實(shí)例介紹
這篇文章主要介紹了Java并發(fā)編程之柵欄(CyclicBarrier)實(shí)例介紹,柵欄類似閉鎖,但是它們是有區(qū)別的,需要的朋友可以參考下2015-04-04