×

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

Lazy Propagation in Segment Tree in Java

The topic of segment trees in Java is continued by the topic of sluggish propagation in segment trees. It is suggested that readers first read through the section tree topic....

4 minutes read.

Java List Node

In Java, List Node is the same as the single linked list, which is the collection of nodes. So, we can say, the list nodes are grouped together to get...

8 minutes read.

Java Default Keyword

The Default keyword in java programming language is used as access modifier.If any of the variable or the constructor or the methods or the classes are not assigned with the...

3 minutes read.

Types of Garbage Collector in Java

Garbage collection is a Java feature that offers automatic memory management. The JVM is in charge of it. The programmer does not have to handle object creation and deallocation. We...

3 minutes read.

Applet Program in Java

Applet Program in Java An applet is a program that can be embedded in a web page. Applets programs are run by a web browser. It mainly works on the client-side....

3 minutes read.

Hollow Diamond Pattern in Java

Why are patterns important? Programmers frequently create Java pattern programs to practice coding and ace interviews. Interviewers frequently test candidates' logical reasoning and implementation by asking about pattern programs. Hollow Diamond Pattern The...

7 minutes read.

Deadlock in Java

Deadlock is when two or more processes wait for the state to do their tasks, but none of them can do so. It is a very common problem that one...

6 minutes read.

Interface in Java

  Interface in Java In Java, the interface is just like a class that has only static constants and abstract methods. It is used to achieve polymorphism so that it can also...

6 minutes read.

Java Continue Keyword

The java keyword ‘continues’ has also been called as java continue statement.The main concepts of the java continue statement or keyword is used in the controlling of the loop structure.Java...

3 minutes read.

Java String lastIndexOf() method

Java String lastIndexOf() method returns last index of character or substring in a String. Syntax: Method Description int lastIndexOf(int ch)It returns last index position for the given char valueint lastIndexOf(int ch, int...

2 minutes read.

Median Of Stream Of Running Integers in Java

An integer array is given to us. Compute the median of the elements traversed so far in the input array. For the sake of simplicity, assume that there are no...

10 minutes read.

Java Socket Programming

Java Socket Programming Socket programming is used for the communication between the applications, i.e., client and server running on different JRE may be connection-oriented or connectionless. The client program can be designed using the...

8 minutes read.

Java Custom Exception

Java Custom Exception Java language facilitates us to create our own exceptions. The class intended to throw the Custom Exception has to be derived from the Java Exceptionor RuntimeExceptionclass. The Java...

4 minutes read.

Java New Keyword

To create a class instance in Java, use the new keyword. In other words, it returns a reference to the memory that was allocated for a new object and instantiates...

3 minutes read.

Sorting Program in Java

Sorting Program in Java: The sorting program in Java is used to sort arrays either in ascending or descending order.  There are two predefined methods available in Java that are...

6 minutes read.

Java Program to find the smallest element in a tree

The variable min is used to store the data of the root, which is initially defined. The smallest node in the left subtree is then located by moving through the...

3 minutes read.

Can Abstract Classes have Static Methods in Java

Abstract Class An abstract class in Java is one that explicitly uses the keyword "abstract" in its declaration. There are options for both non-abstract and abstract techniques (method with the body)....

4 minutes read.

Java Math.multiplyExact() method

In java, we are provided with multiplyExact method in the Math module. This Math module belongs to the java.lang package. In general, this method returns the product of the provided...

2 minutes read.

Java program to find frequency of characters in a string

In this article, you will understand the how to find the frequency of characters in strings by using Java programming language. Along with this, you will understand the hashing concept...

3 minutes read.

Bouncy Number in Java

We will define bouncy numbers in this section and write Java programmes to determine whether a specific number is bouncy. Java coding exams and academic assignments usually inquire about the...

3 minutes read.