In Java, we can use new String(bytes, StandardCharsets.UTF_8) to convert a byte[] to a String.
// string to byte[]
byte[] bytes = "hello".getBytes(StandardCharsets.UTF_8);
// byte[] to string
String s = new String(bytes, StandardCharsets.UTF_8);
1. byte[] in text and binary data
For text or character data, we use new String(bytes, StandardCharsets.UTF_8) to convert the byte[] to a String directly. However, for cases that byte[] is holding the binary data like the image or other non-text data, the best practice is to convert the byte[] into a Base64 encoded string.
// convert file to byte[]
byte[] bytes = Files.readAllBytes(Paths.get("/path/image.png"));
// Java 8 - Base64 class, finally.
// encode, convert byte[] to base64 encoded string
String s = Base64.getEncoder().encodeToString(bytes);
System.out.println(s);
// decode, convert base64 encoded string back to byte[]
byte[] decode = Base64.getDecoder().decode(s);
// This Base64 encode decode string is still widely use in
// 1. email attachment
// 2. embed image files inside HTML or CSS
Note
* For
text data byte[], trynew String(bytes, StandardCharsets.UTF_8).* For
binary data byte[], try Base64 encoding.
2. Convert byte[] to String (text data)
The below example convert a string to a byte array or byte[] and vice versa.
Warning
The common mistake is trying to use thebytes.toString()to get the string from the bytes; Thebytes.toString()only returns the address of the object in memory, NOT convertingbyte[]to astring! The correct way to convertbyte[]tostringisnew String(bytes, StandardCharsets.UTF_8).
ConvertBytesToString2.java
package com.favtuts.string;
import java.nio.charset.StandardCharsets;
public class ConvertBytesToString2 {
public static void main(String[] args) {
String str = "This is raw text!";
// string to byte[]
byte[] bytes = str.getBytes(StandardCharsets.UTF_8);
System.out.println("Text : " + str);
System.out.println("Text [Byte Format] : " + bytes);
// no, don't do this, it returns the address of the object in memory
System.out.println("Text [Byte Format] toString() : " + bytes.toString());
// convert byte[] to string
String s = new String(bytes, StandardCharsets.UTF_8);
System.out.println("Output : " + s);
// old code, UnsupportedEncodingException
// String s1 = new String(bytes, "UTF_8");
}
}
Output
Text : This is raw text!
Text [Byte Format] : [B@372f7a8d
Text [Byte Format] toString() : [B@372f7a8d
Output : This is raw text!
3. Convert byte[] to String (binary data)
The below example converts an image phone.png into a byte[], and uses the Java 8 Base64 class to convert the byte[] to a Base64 encoded String.
Later, we convert the Base64 encoded string back to the original byte[] and save it into another image named phone2.png.
ConvertBytesToStringBase64.java
package com.favtuts.string;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.Base64;
public class ConvertBytesToStringBase64 {
public static void main(String[] args) {
String filePath = ClassLoader.getSystemResource("phone.png").getFile();
Path path = Paths.get(filePath);
if (Files.notExists(path)) {
throw new IllegalArgumentException("File is not exists!");
}
try {
// convert the file's content to byte[]
byte[] bytes = Files.readAllBytes(path);
// encode, byte[] to Base64 encoded string
String s = Base64.getEncoder().encodeToString(bytes);
System.out.println(s);
// decode, Base64 encoded string to byte[]
byte[] decode = Base64.getDecoder().decode(s);
// save into another image file
// current directory
Path cwd = Path.of("").toAbsolutePath();
System.out.println(cwd.toString());
Files.write(Paths.get(cwd.toString() + "/phone2.png"), decode);
} catch (Exception e) {
e.printStackTrace();
}
}
}
Output
bh5aLyZALN4othXL2mByHo1aZA5ts5k/uw/sc7DBngGY......
# if everything ok, it save the byte[] into a new image phone2.png
Download Source Code
$ git clone https://github.com/favtuts/java-core-tutorials-examples
$ cd java-string