Java Base64 Encoding and Decoding
Introduction to Encoding and Decoding
Encoding is the process of putting the sequence of characters like letters, numbers, punctuations, and other symbols into a specialised format for the efficient transmission or storage. Decoding is the opposite process of encoding. We can define decoding as the conversion of the encoded format into the original sequence of characters.
In this tutorial, we will discuss how we can perform the encoding and decoding using Java. Java 8 now have an inbuilt encoder and decoder for base64 encoding. In Java 8, we can use three types of base64 encoding. Encoding and decoding are used in data communication, networking, and storing data securely.
Base64 class
If we look at the class Base64, it has certain methods like getEncoder() and corresponding getDecoder(); Again we have getUrlEncoder() and corresponding getUrlDecoder() methods; we also have getMimeEncoder() and corresponding getMimeDecoder() methods.
So basically java 8 allows 3 types of encoding and decoding.
- Simple encoding and decoding
- Uniform Resource Locator or URL encoding and decoding
- Multipurpose Internet Mail Extensions or MIME encoding or decoding.
The 3 types of encoding are discussed below:
- Simple encoding and decoding - The output is mapped with a set of characters that are lying in the range of capital A to capital Z, small a to small z, and numerical values 0 to 9. It also includes 2 operators, that is, “+” and “/”. The encoder is restricted to add any line feed in output, and the decoder rejects any character other than capital A to capital Z, small a to small z, 2 operators, that is, “+” and “/”, and numerical values 0 to 9.
- Universal Resource Locator or URL and Filename Safe encoding and decoding- The output is mapped with the set of characters lying in the range of capital A to capital Z, small a to small z and numerical values 0 to 9. It also includes 2 operators, that is, “+” and “_”. Output is URL and filename safe.
- MIME or Multipurpose Internet Mail Extensions encoding and decoding- The output is mapped to Multipurpose Internet Mail Extensions friendly format. The output is represented in lines of number more than 76 characters each, and also uses a carriage return '\r' which is followed by a line feed '\n' for the line separation purpose. No line separator is present at the end of an encoded output.
The nested classes associated with the Base64 class are discussed below in brief:
- Static class Base64.Encoder- The static class Base64 Encoder is responsible for implementing an encoder for the purpose of encoding the byte data using our Base64 scheme of encoding as specified by the Request for Comments 4648 and Request for Comments 2045.
- Static class Base64.Decoder- The static class Base64 Decoder is responsible for implementing a decoder for the purpose of decoding the byte data using our Base64 scheme of decoding as specified by the Request for Comments 4648 and Request for Comments 2045
Methods associated with the Base64 class are discussed below in brief:
1. The methods that are included in the Static class Base64.Encoder is listed below:
- static Base64.Encoder getEncoder()
The getEncoder() method returns a Base64.Encoder that is responsible for encoding with the help of the Basic type base64 scheme of encoding.
- static Base64.Encoder getUrlEncoder()
The getUrlEncoder() returns a Base64.Encoder that is responsible for encoding with the help of the URL and Filename safe type base64 scheme of encoding.
- static Base64.Encoder getMimeEncoder()
The getMimeEncoder() method returns a Base64.Encoder that is responsible for encoding with the help of the MIME type base64 scheme of encoding.
- static Base64.Encoder getMimeEncoder(int lineLength, byte[] lineSeparator)
The getMimeEncoder(int lineLength, byte[] lineSeparator) returns a Base64. Encoder that is responsible for encoding with the help of the MIME type base64 scheme of encoding provided with the specified line length and line separators.
2. The methods that are included in the Static class Base64.Decoder are listed below:
- static Base64.Decoder getDecoder()
The getDecoder() method is responsible for returning a Base64.Decoder that decodes with the help of the Basic type base64 scheme of encoding.
- static Base64.Decoder getMimeDecoder()
The getMimeDecoder() methods returns a Base64.Decoder that decodes using the MIME type base64 decoding scheme.
- static Base64.Decoder getUrlDecoder()
The getUrlDecoder() method is responsible for returning a Base64.Decoder that decodes with the help of the URL and Filename safe type base64 scheme of encoding.
Programming Examples with Explanations
/*java program to demonstrate the simple encoding in java 8*/
/*Importing the utility package of Java 8 that contains our Base64 class*/
import java.util.*;
//The Main class
class Main{
//We want to encode the string textData
public static void main(String[] args) throws Exception{
final String textData="Tomorrow we will conduct a secret meeting at 10 am sharp, at javaTpoint.";
String encodedText=Base64.getEncoder().encodeToString(textData.getBytes("UTF-8"));
System.out.println("The actual version of the above text data is: ");
System.out.println(textData);
System.out.println();
System.out.println("The encoded version of the above text data is: ");
System.out.println(encodedText);
System.out.println();
/*byte[] decodedArr=Base64.getDecoder().decode(encodedText);
String decodedText=new String(decodedArr,"UTF-8");
System.out.println("The decoded version of the above text data is: ");
System.out.println(decodedText);
System.out.println();*/
}
}
Output-
Microsoft Windows [Version 10.0.22000.318]
(c) Microsoft Corporation. All rights reserved.
C:\Users\USER\Desktop\JTP Folder>javac Main.java //Compile
C:\Users\USER\Desktop\JTP Folder>java Main //Run
The actual version of the above text data is:
Tomorrow we will conduct a secret meeting at 10 am sharp, at javaTpoint.
The encoded version of the above text data is:
V G 9 t b 3 J y b 3 c g d 2 U g d 2 l s b C B j b 2 5 k d W N 0 I G E g c 2 V j c m V 0 I G 1 l Z X R p b m c g Y X Q g M T A g Y W 0 g c 2 h h c n A s I G F 0 I G p h d m F U c G 9 p b n Q u
/*java program to demonstrate the simple decoding in java 8*/
/*Importing the utility package of Java 8 that contains our Base64 class*/
import java.util.*;
//The Main class
class Main{
//We want to decode this encoded string textData
public static void main(String[] args) throws Exception{
final String textData="Tomorrow we will conduct a secret meeting at 10 am sharp, at javaTpoint.";
String encodedText=Base64.getEncoder().encodeToString(textData.getBytes("UTF-8"));
System.out.println("The actual version of the above text data is: ");
System.out.println(textData);
System.out.println();
System.out.println("The encoded version of the above text data is: ");
System.out.println(encodedText);
System.out.println();
byte[] decodedArr=Base64.getDecoder().decode(encodedText);
String decodedText=new String(decodedArr,"UTF-8");
System.out.println("The decoded version of the above text data is: ");
System.out.println(decodedText);
System.out.println();
}
}
Output-
Microsoft Windows [Version 10.0.22000.318]
(c) Microsoft Corporation. All rights reserved.
C:\Users\USER\Desktop\JTP Folder>javac Main.java //Compile
C:\Users\USER\Desktop\JTP Folder>java Main //Run
The actual version of the above text data is:
Tomorrow we will conduct a secret meeting at 10 am sharp, at javaTpoint.
The encoded version of the above text data is:
V G 9 t b 3 J y b 3 c g d 2 U g d 2 l s b C B j b 2 5 k d W N 0 I G E g c 2 V j c m V 0 I G 1 l Z X R p b m c g Y X Q g M T A g Y W 0 g c 2 h h c n A s I G F 0 I G p h d m F U c G 9 p b n Q u
The decoded version of the above text data is:
Tomorrow we will conduct a secret meeting at 10 am sharp, at javaTpoint.
/*java program to demonstrate the URL encoding in java 8*/
/*Importing the utility package of Java 8 that contains our Base64 class*/
import java.util.*;
//The Main class
class Main{
//We want to encode the string textData
public static void main(String[] args) throws Exception{
final String textData="Here we have performed the URL encoding and decoding using Base64 class.";
String encodedText=Base64.getUrlEncoder().encodeToString(textData.getBytes("UTF-8"));
System.out.println("The actual version of the above text data is: ");
System.out.println(textData);
System.out.println();
System.out.println("The encoded version of the above text data is: ");
System.out.println(encodedText);
System.out.println();
/*byte[] decodedArr=Base64.getUrlDecoder().decode(encodedText);
String decodedText=new String(decodedArr,"UTF-8");
System.out.println("The decoded version of the above text data is: ");
System.out.println(decodedText);
System.out.println();*/
}
}
Output-
Microsoft Windows [Version 10.0.22000.318]
(c) Microsoft Corporation. All rights reserved.
C:\Users\USER\Desktop\JTP Folder>javac Main.java //Compile
C:\Users\USER\Desktop\JTP Folder>java Main //Run
The actual version of the above text data is:
Here we have performed the URL encoding and decoding using Base64 class.
The encoded version of the above text data is:
S G V y Z S B 3 Z S B o Y X Z l I H B l c m Z v c m 1 l Z C B 0 a G U g d X J s I G V u Y 2 9 k a W 5 n I G F u Z C B k Z W N v Z G l u Z y B 1 c 2 l u Z y B C Y X N l N j Q g Y 2 x h c 3 M u
/*java program to demonstrate the URL decoding in java 8*/
/*Importing the utility package of Java 8 that contains our Base64 class*/
import java.util.*;
//The Main class
class Main{
//We want to decode this encoded string textData
public static void main(String[] args) throws Exception{
final String textData="Here we have performed the URL encoding and decoding using Base64 class.";
String encodedText=Base64.getUrlEncoder().encodeToString(textData.getBytes("UTF-8"));
System.out.println("The actual version of the above text data is: ");
System.out.println(textData);
System.out.println();
System.out.println("The encoded version of the above text data is: ");
System.out.println(encodedText);
System.out.println();
byte[] decodedArr=Base64.getUrlDecoder().decode(encodedText);
String decodedText=new String(decodedArr,"UTF-8");
System.out.println("The decoded version of the above text data is: ");
System.out.println(decodedText);
System.out.println();
}
}
Output-
Microsoft Windows [Version 10.0.22000.318]
(c) Microsoft Corporation. All rights reserved.
C:\Users\USER\Desktop\JTP Folder>javac Main.java //Compile
C:\Users\USER\Desktop\JTP Folder>java Main //Run
The actual version of the above text data is:
Here we have performed the URL encoding and decoding using Base64 class.
The encoded version of the above text data is:
S G V y Z S B 3 Z S B o Y X Z l I H B l c mZ vc m 1 l Z C B 0 a G U g V V J M I G V u Y 2 9 k a W 5 n I G F u Z C B k Z W N v Z G l u Z y B 1 c 2 l u Z y B C Y X N l N j Q g Y 2 x h c 3 M u
The decoded version of the above text data is:
Here we have performed the URL encoding and decoding using Base64 class.
/*Java program to demonstrate the MIME encoding in java 8*/
/*Importing the utility package of Java 8 that contains our Base64 class*/
import java.util.*;
//The Main class
class Main{
//We want to encode the string textData
public static void main(String[] args) throws Exception{
final String textData="Here we have performed the MIME encoding and decoding using Base64 class.";
String encodedText=Base64.getMimeEncoder().encodeToString(textData.getBytes("UTF-8"));
System.out.println("The actual version of the above text data is: ");
System.out.println(textData);
System.out.println();
System.out.println("The encoded version of the above text data is: ");
System.out.println(encodedText);
System.out.println();
/*byte[] decodedArr=Base64.getMimeDecoder().decode(encodedText);
String decodedText=new String(decodedArr,"UTF-8");
System.out.println("The decoded version of the above text data is: ");
System.out.println(decodedText);
System.out.println();*/
}
}
Output-
Microsoft Windows [Version 10.0.22000.318]
(c) Microsoft Corporation. All rights reserved.
C:\Users\USER\Desktop\JTP Folder>javac Main.java //Compile
C:\Users\USER\Desktop\JTP Folder>java Main //Run
The actual version of the above text data is:
Here we have performed the MIME encoding and decoding using Base64 class.
The encoded version of the above text data is:
S G V y Z S B 3 Z S B o Y X Z l I H B l c m Z v c m 1 l Z C B 0 a G U g T U l N R S Bl b m N vZ G l u Z y B h b m Q g Z G V j b 2 R p b m c g d X N p
b m c g Q m F z Z T Y 0 I G N s Y X N zL g = =
/*Java program to demonstrate the MIME decoding in java 8*/
import java.util.*;
//The Main class
class Main{
//We want to decode this encoded string textData
public static void main(String[] args) throws Exception{
final String textData="Here we have performed the MIME encoding and decoding using Base64 class.";
String encodedText=Base64.getMimeEncoder().encodeToString(textData.getBytes("UTF-8"));
System.out.println("The actual version of the above text data is: ");
System.out.println(textData);
System.out.println();
System.out.println("The encoded version of the above text data is: ");
System.out.println(encodedText);
System.out.println();
byte[] decodedArr=Base64.getMimeDecoder().decode(encodedText);
String decodedText=new String(decodedArr,"UTF-8");
System.out.println("The decoded version of the above text data is: ");
System.out.println(decodedText);
System.out.println();
}
}
Output-
Microsoft Windows [Version 10.0.22000.318]
(c) Microsoft Corporation. All rights reserved.
C:\Users\USER\Desktop\JTP Folder>javac Main.java //Compile
C:\Users\USER\Desktop\JTP Folder>java Main //Run
The actual version of the above text data is:
Here we have performed the MIME encoding and decoding using Base64 class.
The encoded version of the above text data is:
S G V y Z S B 3 Z S B o Y X Z l I H B l c m Z v c m 1 l Z C B 0 a G U g T U l N R S Bl b m N vZ G l u Z y B h b m Q g Z G V j b 2 R p b m c g d X N p
b m c g Q m F z Z T Y 0 I G N s Y X N zL g = =
The decoded version of the above text data is:
Here we have performed the MIME encoding and decoding using Base64 class.
Conclusion
In this tutorial, we have discussed the Base64 class in java which freshly introduced in JDK 8 for the purpose of encoding and decoding. At the beginning of this tutorial, we have discussed what do we mean by encoding and decoding. Later we have discussed the encoding and decoding procedure, that is, simple, URL and mime encoding and decoding supported by java 8. Then we saw the nested classes and methods that are present in the Base64 class and discussed them briefly. Finally, we signed off taking a couple of programming examples.