×

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.

  1. Simple encoding and decoding
  2. Uniform Resource Locator or URL encoding and decoding
  3. 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.


Related Topics

JAR File in Java

What is a JAR File? JAR stands for Java Archive. It is a file format mainly used to combine many Java class files and the corresponding metadata and resources into one...

4 minutes read.

Java Integer hashCode() method

The hashCode()  method of Java Integer class returns a hash code for this Integer.  Syntax public int hashCode() public static int hashCode(int value)  Parameters The parameter ‘value’ represents a value whose hash code...

1 minute read.

Java Boolean Keyword

Boolean keyword In java programming language we basically have two types of primitive data types, Boolean and Numeric (integer and floating-point data types). In this article we are going to learn...

4 minutes read.

Java Math min() Method

The min() method of Math class returns the smaller of two arguments. The arguments can be of double, float, int or long data type. Syntax: public static double min (double a, double...

2 minutes read.

Rehashing in Java

The most crucial idea mostly in the data structure is hashing, which is utilized to change a particular key into some other value. The hash function can be used to...

7 minutes read.

Three Partition Problems in Java

In talks with leading IT organizations like Google, Amazon, TCS, Accenture, etc., this extremely intriguing subject is constantly brought up. The goal of the problem-solving exercise is to evaluate the...

8 minutes read.

Web Service Response Time Calculation in Java

Administration response time or reaction time is the typical measure of time it takes for a solicitation to be handled by a PC framework, like your organization switch. In the...

4 minutes read.

Java Arrays Fill

We may use the Arrays.fill () function to fill a whole array or a subset of it. Arrays.fill () may fill both 2D and 3D arrays. Syntax: Arrays.fill(boolean[] fillArr, int fromIndex, int toIndex, boolean val )   Parameters: The array to be filled...

4 minutes read.

Client Server Program in Java

Client Server Program in Java The client and server are the two main components of socket programming. The client is a computer/node that request for the service and the server is...

7 minutes read.

Java Wrapper Class

Wrapper class in Java encapsulates a primitive type within an object. In other words, it is a unique mechanism of Java to convert primitive type in to object and object into primitive type....

3 minutes read.

Java Read File to String

There are different ways to deal with forming and examining a text record. This is normal while dealing with various applications. There are different ways to deal with looking at a...

6 minutes read.

Java Math exp() Method

The exp() method of Math class returns Euler’s number(e) raised to the power of a double value. Syntax: public static double exp(double a) Parameters: The parameter ‘a’ represents the exponent e. Return Value: The exp ()...

2 minutes read.

Why to use Enum in Java?

In this article, you will be acknowledged about the Enum in java, its uses and mainly its purpose. Enum has various functionalities. Each of them will be discussed. Enum In a computer...

3 minutes read.

Java Program to remove duplicate characters in a string

In strings, we can find many characters present one or more times in a string; accessing a particular character is difficult due to repetition. Duplicate characters will present in the...

5 minutes read.

Count of Range Sum Problem in Java

In this article, we will discuss the basic approach or native approach used to count range sum problem in java. To solve this problem, we will check for numbers if they...

6 minutes read.

Java Buffer Reader

When a variable cannot change its value during run time is called a Static way of programming. In this programming, a variable is directly assigned to a value. Program: Import java.io.*; class  A {  ...

4 minutes read.

Creating a Jar file in Java

The JDK's jar (Java Archive) tool offers the ability to produce jar files that can be executed. If you double-click a jar file that is executable, it will call the...

2 minutes read.

How to Convert Object to String in Java

How to Convert Object to String in Java You can convert any Object to String in Java whether it is a user-defined class, StringBuilder or StringBuffer, etc. There are two methods...

2 minutes read.

Difference Between Data Hiding and Abstraction in Java

Abstraction: Data Abstraction and Data Hiding ideas are utilised to show the expected data to the end client and conceal the superfluous subtleties, however, for specific purposes like decreasing the framework's...

10 minutes read.

Java Math sinh() Method

The sinh() method of Java Math class returns the hyperbolic sine of the specified double value. Syntax: public static double sinh(double x) Parameters: The parameter ‘a’ represents the number whose hyperbolic sine is to...

2 minutes read.