Table des matières
Introduction
Support JAVA pour base64
Classification et implémentation de Base64 dans le JDK
Maison Java javaDidacticiel Comment implémenter l'encodeur base64 en Java

Comment implémenter l'encodeur base64 en Java

Apr 28, 2023 pm 04:04 PM
java base64

Introduction

Qu'est-ce que l'encodage Base64 ? Avant de répondre à cette question, nous devons comprendre la classification des fichiers dans les ordinateurs. Pour les ordinateurs, les fichiers peuvent être divisés en deux catégories, l’une étant constituée de fichiers texte et l’autre de fichiers binaires.

Pour les fichiers binaires, leur contenu est représenté en binaire, ce qui n'est pas immédiatement compréhensible pour les humains. Si vous essayez d'ouvrir un fichier binaire avec un éditeur de texte, vous risquez de voir du charabia. En effet, la méthode de codage des fichiers binaires est différente de celle des fichiers texte. Ainsi, lorsque l'éditeur de texte tente de traduire les fichiers binaires en contenu texte, des caractères tronqués apparaissent.

Pour les fichiers texte, il existe de nombreuses méthodes de codage, telles que le premier codage ASCII et les méthodes de codage actuellement couramment utilisées telles que UTF-8 et UTF-16. Même les fichiers texte peuvent voir des caractères tronqués si vous les ouvrez en utilisant un encodage différent.

Donc, qu'il s'agisse d'un fichier texte ou d'un fichier binaire, le format d'encodage doit être unifié. En d'autres termes, à quoi ressemble le codage de l'écriture, le codage de la lecture des données doit également y correspondre.

L'encodage Base64 est en fait une méthode d'encodage qui encode les données binaires en caractères visuels ASCII.

Pourquoi y a-t-il une telle exigence ?

Nous savons que le développement du monde informatique ne se fait pas du jour au lendemain. Il s'agit d'un processus de croissance lente. Pour le codage des caractères, il ne prenait en charge que le codage ASCII au début, puis s'est étendu à Unicode, etc. Par conséquent, pour de nombreuses applications, les formats de codage autres que le codage ASCII ne sont pas pris en charge. Alors, comment afficher le code non-ASCII dans ces systèmes ?

La solution consiste à effectuer un mappage d'encodage pour mapper les caractères non-ASCII en caractères ASCII. Base64 est une telle méthode de codage.

L'endroit courant pour utiliser Base64 est dans les pages Web. Parfois, nous devons afficher des images sur des pages Web, afin de pouvoir encoder les images en base64, puis les remplir en HTML.

Une autre application consiste à encoder le fichier en base64, puis à l'envoyer sous forme de pièce jointe à un e-mail.

Support JAVA pour base64

Étant donné que l'encodage base64 est si facile à utiliser, jetons un coup d'œil à l'implémentation base64 dans JAVA.

Il existe une implémentation base64 correspondante en Java, appelée java.util.Base64. Cette classe est une classe d'outils pour Base64, introduite par JDK dans la version 1.8.

Base64 fournit trois méthodes getEncoder et getDecoder. En obtenant l'Encoder et le Decoder correspondants, vous pouvez ensuite appeler les méthodes d'encodage et de décodage de l'encodeur pour encoder et décoder les données, ce qui est très pratique.

Jetons d'abord un coup d'œil aux exemples d'utilisation de base de Base64 :

 // 使用encoder进行编码
 String encodedString = Base64.getEncoder().encodeToString("what is your name baby?".getBytes("utf-8"));
 System.out.println("Base64编码过后的字符串 :" + encodedString);

 // 使用encoder进行解码
 byte[] decodedBytes = Base64.getDecoder().decode(encodedString);

 System.out.println("解码过后的字符串: " + new String(decodedBytes, "utf-8"));
Copier après la connexion

En tant que classe d'outils, la classe d'outils Base64 fournie dans le JDK est toujours très utile.

Je n'expliquerai pas son utilisation en détail ici. Cet article analyse principalement comment Base64 est implémenté dans le JDK.

Classification et implémentation de Base64 dans le JDK

La classe Base64 dans le JDK fournit trois méthodes d'encodeur, à savoir getEncoder, getUrlEncoder et getMimeEncoder:

    public static Encoder getEncoder() {
         return Encoder.RFC4648;
    }

    public static Encoder getUrlEncoder() {
         return Encoder.RFC4648_URLSAFE;
    }

    public static Encoder getMimeEncoder() {
        return Encoder.RFC2045;
    }
Copier après la connexion

De même, elle fournit également trois décodeurs correspondants, à savoir getDecoder , getUrlDecoder, getMimeDecoder:

    public static Decoder getDecoder() {
         return Decoder.RFC4648;
    }

    public static Decoder getUrlDecoder() {
         return Decoder.RFC4648_URLSAFE;
    }

    public static Decoder getMimeDecoder() {
         return Decoder.RFC2045;
    }
Copier après la connexion

Comme le montre le code, ces trois codages correspondent respectivement à RFC4648, RFC4648_URLSAFE et RFC2045.

Ces trois sont toutes des variantes de l'encodage base64. Jetons un coup d'œil à leurs différences :

/=</code > Obligatoire</table><p></p> <p>RFC 4648 : base64 (standard)</p><p><code>+

/

= optionnel

RFC 4648 : base64url (URL- et standard de sécurité des noms de fichiers)

-

_

🎜= optionnel🎜🎜🎜🎜🎜peut être vu La différence entre base64 et Base64url signifie que les 62e et 63e caractères codés sont différents, et la différence entre base64 pour MIME et base64 est de savoir si le caractère de complétion est obligatoire. 🎜🎜De plus, pour Basic et base64url, les caractères de séparation de ligne ne seront pas ajoutés, tandis que base64 pour MIME ajoutera « r » et « n » comme séparateurs de ligne après qu'une ligne dépasse 76 caractères. 🎜🎜Enfin, si lors du processus de décodage, il s'avère qu'il y a des caractères qui n'existent pas dans la table de mappage Base64, les méthodes de traitement sont également différentes. Base64 et Base64url le rejetteront directement, tandis que base64 pour MIME l'ignorera. 🎜🎜La différence entre base64 et Base64url peut être vue à travers les deux méthodes suivantes : 🎜
        private static final char[] toBase64 = {
            &#39;A&#39;, &#39;B&#39;, &#39;C&#39;, &#39;D&#39;, &#39;E&#39;, &#39;F&#39;, &#39;G&#39;, &#39;H&#39;, &#39;I&#39;, &#39;J&#39;, &#39;K&#39;, &#39;L&#39;, &#39;M&#39;,
            &#39;N&#39;, &#39;O&#39;, &#39;P&#39;, &#39;Q&#39;, &#39;R&#39;, &#39;S&#39;, &#39;T&#39;, &#39;U&#39;, &#39;V&#39;, &#39;W&#39;, &#39;X&#39;, &#39;Y&#39;, &#39;Z&#39;,
            &#39;a&#39;, &#39;b&#39;, &#39;c&#39;, &#39;d&#39;, &#39;e&#39;, &#39;f&#39;, &#39;g&#39;, &#39;h&#39;, &#39;i&#39;, &#39;j&#39;, &#39;k&#39;, &#39;l&#39;, &#39;m&#39;,
            &#39;n&#39;, &#39;o&#39;, &#39;p&#39;, &#39;q&#39;, &#39;r&#39;, &#39;s&#39;, &#39;t&#39;, &#39;u&#39;, &#39;v&#39;, &#39;w&#39;, &#39;x&#39;, &#39;y&#39;, &#39;z&#39;,
            &#39;0&#39;, &#39;1&#39;, &#39;2&#39;, &#39;3&#39;, &#39;4&#39;, &#39;5&#39;, &#39;6&#39;, &#39;7&#39;, &#39;8&#39;, &#39;9&#39;, &#39;+&#39;, &#39;/&#39;
        };
Copier après la connexion
        private static final char[] toBase64URL = {
            &#39;A&#39;, &#39;B&#39;, &#39;C&#39;, &#39;D&#39;, &#39;E&#39;, &#39;F&#39;, &#39;G&#39;, &#39;H&#39;, &#39;I&#39;, &#39;J&#39;, &#39;K&#39;, &#39;L&#39;, &#39;M&#39;,
            &#39;N&#39;, &#39;O&#39;, &#39;P&#39;, &#39;Q&#39;, &#39;R&#39;, &#39;S&#39;, &#39;T&#39;, &#39;U&#39;, &#39;V&#39;, &#39;W&#39;, &#39;X&#39;, &#39;Y&#39;, &#39;Z&#39;,
            &#39;a&#39;, &#39;b&#39;, &#39;c&#39;, &#39;d&#39;, &#39;e&#39;, &#39;f&#39;, &#39;g&#39;, &#39;h&#39;, &#39;i&#39;, &#39;j&#39;, &#39;k&#39;, &#39;l&#39;, &#39;m&#39;,
            &#39;n&#39;, &#39;o&#39;, &#39;p&#39;, &#39;q&#39;, &#39;r&#39;, &#39;s&#39;, &#39;t&#39;, &#39;u&#39;, &#39;v&#39;, &#39;w&#39;, &#39;x&#39;, &#39;y&#39;, &#39;z&#39;,
            &#39;0&#39;, &#39;1&#39;, &#39;2&#39;, &#39;3&#39;, &#39;4&#39;, &#39;5&#39;, &#39;6&#39;, &#39;7&#39;, &#39;8&#39;, &#39;9&#39;, &#39;-&#39;, &#39;_&#39;
        };
Copier après la connexion
🎜Pour MIME, il définit le nombre maximum de caractères dans une ligne, et le caractère de nouvelle ligne : 🎜
        private static final int MIMELINEMAX = 76;
        private static final byte[] CRLF = new byte[] {&#39;\r&#39;, &#39;\n&#39;};
Copier après la connexion
🎜Utilisation avancée de Base64🎜🎜Général dans dans ce cas, la longueur de l'objet que nous encodons avec Base64 est fixe. Il suffit de convertir l'objet d'entrée en un tableau d'octets pour appeler la méthode d'encodage ou de décodage. 🎜🎜Mais dans certains cas, nous devons convertir les données du flux. Dans ce cas, nous pouvons utiliser les deux méthodes d'encapsulation de Stream fournies en Base64 : 🎜
        public OutputStream wrap(OutputStream os) {
            Objects.requireNonNull(os);
            return new EncOutputStream(os, isURL ? toBase64URL : toBase64,
                                       newline, linemax, doPadding);
        }
Copier après la connexion
        public InputStream wrap(InputStream is) {
            Objects.requireNonNull(is);
            return new DecInputStream(is, isURL ? fromBase64URL : fromBase64, isMIME);
        }
Copier après la connexion
🎜Ces deux méthodes correspondent respectivement à l'encodeur et au décodeur. 🎜

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

Video Face Swap

Video Face Swap

Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Nombre parfait en Java Nombre parfait en Java Aug 30, 2024 pm 04:28 PM

Guide du nombre parfait en Java. Nous discutons ici de la définition, comment vérifier le nombre parfait en Java ?, des exemples d'implémentation de code.

Weka en Java Weka en Java Aug 30, 2024 pm 04:28 PM

Guide de Weka en Java. Nous discutons ici de l'introduction, de la façon d'utiliser Weka Java, du type de plate-forme et des avantages avec des exemples.

Numéro de Smith en Java Numéro de Smith en Java Aug 30, 2024 pm 04:28 PM

Guide du nombre de Smith en Java. Nous discutons ici de la définition, comment vérifier le numéro Smith en Java ? exemple avec implémentation de code.

Questions d'entretien chez Java Spring Questions d'entretien chez Java Spring Aug 30, 2024 pm 04:29 PM

Dans cet article, nous avons conservé les questions d'entretien Java Spring les plus posées avec leurs réponses détaillées. Pour que vous puissiez réussir l'interview.

Break or Return of Java 8 Stream Forach? Break or Return of Java 8 Stream Forach? Feb 07, 2025 pm 12:09 PM

Java 8 présente l'API Stream, fournissant un moyen puissant et expressif de traiter les collections de données. Cependant, une question courante lors de l'utilisation du flux est: comment se casser ou revenir d'une opération FOREAK? Les boucles traditionnelles permettent une interruption ou un retour précoce, mais la méthode Foreach de Stream ne prend pas directement en charge cette méthode. Cet article expliquera les raisons et explorera des méthodes alternatives pour la mise en œuvre de terminaison prématurée dans les systèmes de traitement de flux. Lire plus approfondie: Améliorations de l'API Java Stream Comprendre le flux Forach La méthode foreach est une opération terminale qui effectue une opération sur chaque élément du flux. Son intention de conception est

Horodatage à ce jour en Java Horodatage à ce jour en Java Aug 30, 2024 pm 04:28 PM

Guide de TimeStamp to Date en Java. Ici, nous discutons également de l'introduction et de la façon de convertir l'horodatage en date en Java avec des exemples.

Programme Java pour trouver le volume de la capsule Programme Java pour trouver le volume de la capsule Feb 07, 2025 am 11:37 AM

Les capsules sont des figures géométriques tridimensionnelles, composées d'un cylindre et d'un hémisphère aux deux extrémités. Le volume de la capsule peut être calculé en ajoutant le volume du cylindre et le volume de l'hémisphère aux deux extrémités. Ce tutoriel discutera de la façon de calculer le volume d'une capsule donnée en Java en utilisant différentes méthodes. Formule de volume de capsule La formule du volume de la capsule est la suivante: Volume de capsule = volume cylindrique volume de deux hémisphères volume dans, R: Le rayon de l'hémisphère. H: La hauteur du cylindre (à l'exclusion de l'hémisphère). Exemple 1 entrer Rayon = 5 unités Hauteur = 10 unités Sortir Volume = 1570,8 unités cubes expliquer Calculer le volume à l'aide de la formule: Volume = π × r2 × h (4

Créer l'avenir : programmation Java pour les débutants absolus Créer l'avenir : programmation Java pour les débutants absolus Oct 13, 2024 pm 01:32 PM

Java est un langage de programmation populaire qui peut être appris aussi bien par les développeurs débutants que par les développeurs expérimentés. Ce didacticiel commence par les concepts de base et progresse vers des sujets avancés. Après avoir installé le kit de développement Java, vous pouvez vous entraîner à la programmation en créant un simple programme « Hello, World ! ». Une fois que vous avez compris le code, utilisez l'invite de commande pour compiler et exécuter le programme, et « Hello, World ! » s'affichera sur la console. L'apprentissage de Java commence votre parcours de programmation et, à mesure que votre maîtrise s'approfondit, vous pouvez créer des applications plus complexes.

See all articles
Nom d'encodage Caractère codé Caractère codé Caractère codé
62. ème position Bit 63 Caractère complet
RFC 2045 : Encodage de transfert Base64 pour MIME++/= mandatory
RFC 4648: base64 (standard)+/= optional
RFC 4648: base64url (URL- and filename-safe standard)-_=