base_Java 8 Base64编码和解码(带有示例)

base

base

学习使用Java 8和使用Java 8 api进行base64编码和解码功能的不同方法,以及使用apache commons编解码器的示例。

1.概述

在本文中,您将学习Java 8和其他替代库(例如apache common API Utility)中执行base 64编码和解码技术的不同方法。

了解如何在Java中对base64进行编码和解码的技术。

2. Java 8 – Base64 API

长时间之后,Java 8作为JDK 8的一部分添加了内置的base64编码和解码功能。

这简化了编码和解码过程,而无需使用其他第三方库。

在Java 8中,我们主要可以使用3种类型的编码和解码功能作为标准。 与之相关的所有类均在java.util.base64包中。

2.1基本或简单类型

2.2 URL编码/解码

2.3 MIME编码/解码

让我们探索所有这些。

3. Java 8 Base64方法

Base64是用于编码和解码的基类。 它有两个静态内部类,分别是Base64.Encoder,Base64.Decoder。

使用以下方法为每种类型获取正确的编码器和解码器。

返回使用基本类型base64编码方案进行解码的Base64.Decoder。

3.2静态Base64.Encoder getEncoder()

返回使用基本类型base64编码方案进行编码的Base64.Encoder。

3.3静态Base64.Decoder getMimeDecoder()

返回使用MIME类型base64解码方案解码的Base64.Decoder。

3.4静态Base64.Encoder getMimeEncoder()

返回使用MIME类型base64编码方案进行编码的Base64.Encoder。

3.5静态Base64.Encoder getMimeEncoder(int lineLength,byte [] lineSeparator)

返回一个Base64.Encoder,该编码使用具有指定行长和行分隔符的MIME类型base64编码方案进行编码。

3.6静态Base64.Decoder getUrlDecoder()

返回一个Base64.Decoder,该解码器使用URL和Filename安全类型base64编码方案进行解码。

3.7静态Base64.Encoder getUrlEncoder()

返回一个Base64.Encoder,它使用URL和Filename安全类型base64编码方案进行编码。

4. Java 8 Base 64简单编码和解码

这是Base64中的一种简单编码技术

编码的字符串将仅包含这些字符集“ A-Za-z0-9 + /”,并在解码时将换行符视为换行符。 让我们看一下您将清楚理解的示例。

 package com.javaprogramto.java8.base64;
 import java.util.Base64;
 public class SImpleBase64Example { 
    public static void main(String[] args) { 
        String originalString = "Welcome to javaprogramto.com \n good day" ; 
        // create base simple encoder object

        Base64.Encoder simpleEncoder = Base64.getEncoder();

        // Encoding string using simple encode

        String encodedString = simpleEncoder.encodeToString(originalString.getBytes());

        System.out.println( "Encoded string : " +encodedString);
        
        // Create base simple decoder object

        Base64.Decoder simpleDecoder = Base64.getDecoder();
        
        // Deconding the encoded string using decoder

        String decodedString = new String(simpleDecoder.decode(encodedString.getBytes()));

        System.out.println( "Decoded String : " +decodedString);

    }
 }

输出:

 Encoded string : V2VsY29tZSB0byBqYXZhcHJvZ3JhbXRvLmNvbSAKIGdvb2QgZGF5
 Decoded String : Welcome to javaprogramto.com

 good day

如您在输出中看到的,实际的输入字符串具有一个行分隔符。 用于编码。 encodeToString()方法,它具有来自简单编码字符集的字符。

但是,当使用返回字节[]而不是字符串的decode()方法进行解码时。 您需要显式转换为String对象。

最后,遇到行分隔符时,解码的字符串将在下一行显示内容。

5. Java 8 Base64带填充的编码和解码

默认情况下,如果编码的字符串长度不符合所需的长度,则使用'='双等号运算符对填充进行编码。

通常,编码后的字符串为3的倍数,否则将与= character一起添加

另一方面,在解码时,所有多余的填充字符都将被丢弃

如果确实要解码,则可以使用withPadding()进行编码,而无需填充。

withoutPadding ()方法有助于跳过输出的填充。

许多开发人员认为没有填充编码的字符串不能被解码回原始字符串。

但是,这是错误的, Base64.Decode api提供了灵活的回解码功能。

请看下面的示例,以了解有无填充的情况,以及如何将其编码为原始格式。

 package com.javaprogramto.java8.base64;
 import java.util.Base64;
 public class SImpleBase64WithoutPaddingExample { 
    public static void main(String[] args) { 
        String originalString = "Welcome to javaprogramto.com" ; 
        System.out.println( "Original String : " +originalString);

        // create base simple encoder object

        Base64.Encoder simpleEncoder = Base64.getEncoder();

        // Encoding string using simple encode

        String encodedString = simpleEncoder.encodeToString(originalString.getBytes());

        System.out.println( "Encoded string with padding : " +encodedString); 
        // encode without padding

        Base64.Encoder withoutPaddingEncoder = Base64.getEncoder().withoutPadding();

        String encodeWithoutPadding = withoutPaddingEncoder.encodeToString(originalString.getBytes());

        System.out.println( "Encoded string without padding : " +encodeWithoutPadding); 
        // Create base simple decoder object

        Base64.Decoder simpleDecoder = Base64.getDecoder();

        // Deconding the encoded string using decoder

        String decodedString = new String(simpleDecoder.decode(encodeWithoutPadding.getBytes()));

        System.out.println( "Decoded String : " +decodedString);

    }
 }

输出:

 Original String : Welcome to javaprogramto.com
 Encoded string with padding : V2VsY29tZSB0byBqYXZhcHJvZ3JhbXRvLmNvbQ==
 Encoded string without padding : V2VsY29tZSB0byBqYXZhcHJvZ3JhbXRvLmNvbQ
 Decoded String : Welcome to javaprogramto.com

6. Java 8 Base64 URL编码和解码

Base64 URL编码器与简单编码器非常相似。 所有字符集都与一个简单的字符集相同,但区别在于是'_'而不是'\'

这是允许的完整URL字符'A-Za-z0-9 + _'

并且也不会在解码器中添加任何行间距。

使用getUrlEncoder()进行编码,并使用getUrlDecoder()解码来自Base64的URL。

Base64 URL示例:

 package com.javaprogramto.java8.base64;
 import java.util.Base64;
 public class SImpleBase64URLExample { 
    public static void main(String[] args) { 
        String originalStringURL = " https://www.google.co.in/imghp?hl=en&tab=wi&authuser=0&ogbl " ; 
        System.out.println( "Original String : " +originalStringURL); 
        // create url encoder object

        Base64.Encoder simpleEncoder = Base64.getUrlEncoder();

        // Encoding string using url encode

        String encodedString = simpleEncoder.encodeToString(originalStringURL.getBytes());

        System.out.println( "Encoded URL string with padding : " +encodedString); 
        // encode without padding

        Base64.Encoder withoutPaddingEncoder = Base64.getEncoder().withoutPadding();

        String encodeWithoutPadding = withoutPaddingEncoder.encodeToString(originalStringURL.getBytes());

        System.out.println( "Encoded URL string without padding : " +encodeWithoutPadding); 
        // Create base simple decoder object

        Base64.Decoder simpleDecoder = Base64.getDecoder();

        // Deconding the encoded string using decoder

        String decodedString = new String(simpleDecoder.decode(encodeWithoutPadding.getBytes()));

        System.out.println( "Decoded URL String : " +decodedString);

    }
 }

输出:

 Original String : https: //www.google.co.in/imghp?hl=en&tab=wi&authuser=0&ogbl Original String : https: //www.google.co.in/imghp?hl=en&tab=wi&authuser=0&ogbl Original String : https: //www.google.co.in/imghp?hl=en&tab=wi&authuser=0&ogbl
 Encoded URL string with padding : aHR0cHM6Ly93d3cuZ29vZ2xlLmNvLmluL2ltZ2hwP2hsPWVuJnRhYj13aSZhdXRodXNlcj0wJm9nYmw=
 Encoded URL string without padding : aHR0cHM6Ly93d3cuZ29vZ2xlLmNvLmluL2ltZ2hwP2hsPWVuJnRhYj13aSZhdXRodXNlcj0wJm9nYmw
 Decoded URL String : https: //www.google.co.in/imghp?hl=en&tab=wi&authuser=0&ogbl Decoded URL String : https: //www.google.co.in/imghp?hl=en&tab=wi&authuser=0&ogbl

7. Java 8 Base64 MIME编码和解码

MIME编码是Base64编码和解码的另一种类型。 MIME技术主要用于更多数据,例如ASCII,电子邮件内容附件,音频,视频和需要编码和解码的图像

使用Base64.getMimeEncoder()进行MIME数据编码,使用Base64.getMimeDecoder()进行MIME数据解码

按MIME类型编码的内容将分为多行,每行长度不超过76个字符。 每行以回车符结尾,例如\ n或\ r。

 package com.javaprogramto.java8.base64;
 import java.util.Base64;
 import java.util.UUID;
 public class SImpleBase64MIMEExample { 
    public static void main(String[] args) { 
        // adding random 10 UUID values.

        String mimeContent = generateMimeBuffer().toString();

        System.out.println( "Original mime buffer length: " + mimeContent.length()); 
        // Base64 MIME Encode

        Base64.Encoder mimeEncode = Base64.getMimeEncoder();

        String mimeEncodedStr = mimeEncode.encodeToString(mimeContent.getBytes());

        System.out.println( "MIME encoded string : " + mimeEncodedStr); 
        // Base64 MIME Decode

        Base64.Decoder mimeDecode = Base64.getMimeDecoder();

        String mimeDecodedStr = new String(mimeDecode.decode(mimeEncodedStr.getBytes()));

        System.out.println( "MIME decoded string length: " + mimeDecodedStr.length());

    }

    /**

     * Genreates random 10 UUID numbers and adds to the StringBuffer.

     *

     * @return

     */

    private static StringBuffer generateMimeBuffer() { 
        StringBuffer buffer = new StringBuffer();

        for ( int i = 0 ; i < 10 ; i++) { 
            buffer.append(UUID.randomUUID());

        }

        return buffer; 
    }
 }

输出:

 package com.javaprogramto.java8.base64;
 Original mime buffer length: 360
 MIME encoded string : N2Y1Njk5MjEtMjg1OC00YTBhLWFlMDgtYTJhMTIzMDkxOTY5OWNjNWM3OWYtZGQ5My00OTE4LWIz
 N2MtYmNlM2I1MzA2MDk0ODdhZTUwNDgtODBlMi00YTUxLThjMGEtZDY4M2Y1YWZmMjc1OWI2YWU4
 ZDMtZTE0Ni00ZTQzLWE4MWItMTllYTZiYzE0MDEwYzQ1YjE3MzQtZTM1Ni00NmU5LThhOWMtNDlk
 ODA2NGQ4YTU1YzgwYzIxZTUtZDI1Zi00YzMyLTliMzEtY2ViNmU3OGIyNWU3ZDcxOWI4OGYtNzY2
 OC00ZGExLThiZGYtMDlmOGM4MTk2MzkxMjI3MTllZjQtMTVkZC00YTY1LTgxZmQtYWUyYzAxYjI1
 MjAyYjM2ZDY4ZmItODkxMS00ZGY1LWJiZmEtM2YwMDhiYmZkMzQ5NGIwZmUyOTUtNzMyOC00Nzgz
 LThmOTEtYTI5ZWMwM2E4NWFk
 MIME decoded string length: 360

8.使用Apache Commons API进行编码和解码

首先,您需要如下所示将依赖项添加到pom.xml文件或将commons-codec.jar文件添加到项目。

 package com.javaprogramto.java8.base64;
 <dependency>

    <groupId>commons-codec</groupId>

    <artifactId>commons-codec</artifactId>

    <version> 1.10 </version>
 </dependency>

由于安全性是高优先级,因此建议始终使用最新版本的commons编解码器

使用org.apache.commons.codec.binary.Base64类方法可进行编码和解码,并且它具有带有不同参数的各种构造函数。 其中大多数看起来非常有用。

Base64():创建用于解码(所有模式)和以URL不安全模式编码的Base64编解码器。

Base64(boolean urlSafe):创建用于在给定URL安全模式下解码(所有模式)和编码的Base64编解码器。

Base64(int lineLength):创建用于解码(所有模式)和URL不安全模式下编码的Base64编解码器。

Base64(int lineLength,byte [] lineSeparator):创建一个Base64编解码器,用于在URL不安全模式下进行解码(所有模式)和编码。

Base64(int lineLength,byte [] lineSeparator,boolean urlSafe):创建一个Base64编解码器,用于解码(所有模式)和URL不安全模式下的编码。

Apache Commons Codec Bas64示例:

 package com.javaprogramto.java8.base64;
 package com.javaprogramto.java8.base64.apache;
 import org.apache.commons.codec.binary.Base64;
 public class ApacheCommonsCodecBase64 {

    public static void main(String[] args) { 
        String originalInput = "test input for apache commons codec" ; 
        Base64 base64 = new Base64(); 
        // Commons codec encoding

        String encodedString = new String(base64.encode(originalInput.getBytes()));

        System.out.println( "Encoded string : " +encodedString); 
        // Commons codec decoding

        String decodedString = new String(base64.decode(encodedString.getBytes()));

        System.out.println( "Decoded string : " +decodedString); 
    }
 }

输出:

 package com.javaprogramto.java8.base64;
 Encoded string : dGVzdCBpbnB1dCBmb3IgYXBhY2hlIGNvbW1vbnMgY29kZWM=
 Decoded string : test input for apache commons codec

并且apache commons编解码器api提供了用于解码和编码的静态方法

Base64.encodeBase64()和Base64.decodeBase64()示例:

 package com.javaprogramto.java8.base64;
 package com.javaprogramto.java8.base64.apache;
 import org.apache.commons.codec.binary.Base64;
 public class ApacheCommonsCodecBase64Static {

    public static void main(String[] args) { 
        String originalInput = "Test commons codec with static methods" ; 
        // Commons codec encoding with Base64.encodeBase64()

        String encodedString = new String(Base64.encodeBase64(originalInput.getBytes()));

        System.out.println( "Encoded string : " +encodedString); 
        // Commons codec decoding with Base64.decodeBase64()

        String decodedString = new String(Base64.decodeBase64(encodedString.getBytes()));

        System.out.println( "Decoded string : " +decodedString); 
    }
 }

输出:

 package com.javaprogramto.java8.base64;
 Encoded string : VGVzdCBjb21tb25zIGNvZGVjIHdpdGggc3RhdGljIG1ldGhvZHM=
 Decoded string : Test commons codec with static methods Decoded string : Test commons codec with

使用isChunked参数并将其传递为true,然后它将编码的字符串分成多行,每行包含76个字符。

9.结论

在本文中,您已深入了解Java 8 Base64和有关如何编码和解码的apache commons编解码器api

和往常一样,所有示例都在GitHub上进行。

java.util.Base64示例

Apache编解码器示例

Base64 API

翻译自: https://www.javacodegeeks.com/2020/09/java-8-base64-encoding-and-decoding-with-examples.html

base

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值