Heim  >  Artikel  >  Java  >  Wie implementiert Java die Base64-Kodierung und -Dekodierung? Implementieren Sie 4 Methoden der Base64-Kodierung und -Dekodierung

Wie implementiert Java die Base64-Kodierung und -Dekodierung? Implementieren Sie 4 Methoden der Base64-Kodierung und -Dekodierung

青灯夜游
青灯夜游nach vorne
2018-10-25 16:56:174082Durchsuche

Der Inhalt dieses Artikels besteht darin, vorzustellen, wie Base64-Kodierung und -Dekodierung in Java implementiert werden. Implementieren Sie 4 Methoden der Base64-Kodierung und -Dekodierung. Es hat einen gewissen Referenzwert. Freunde in Not können sich darauf beziehen. Ich hoffe, es wird Ihnen hilfreich sein.

Warum Base64-Kodierung verwenden?

Daten werden über das Netzwerk mit ASCII übertragen. Bei einigen Bildern, Videos und anderen Daten kann es sein, dass sie im unsichtbaren Teil von ASCII kodiert sind. Verschiedene Routing-Geräte im Netzwerk verarbeiten sie unterschiedlich, und dieser Teil der Daten kann verloren gehen. Um die Korrektheit der Datenübertragung sicherzustellen, kann die Base64-Kodierung verwendet werden, um diese unsichtbaren Daten in sichtbare Daten zu kodieren.

Mehrere Möglichkeiten zur Implementierung der Base64-Kodierung und -Dekodierung in Java

Methode 1

Verwenden Sie die Klassen BASE64Encoder und BASE64Decoder im Paket sun.misc zur Kodierung und Dekodierung. Diese Methode ist relativ alt und wird nicht empfohlen.

Der Code lautet wie folgt:

  /**
   * sun.misc方式Base64编码
   * @param str
   * @return
   */
  public static String encodeBySunMisc(String str) {    
     try {      
         return new BASE64Encoder().encode(str.getBytes("UTF-8"));
    } 
    catch (UnsupportedEncodingException e) {
      e.printStackTrace();      
      return "";
    }
  }  
  /**
   * sun.misc方式Base64解码
   * @param str
   * @return
   */
  public static String decodeBySunMisc(String str) {    
     try {      
         byte[] result = new BASE64Decoder().decodeBuffer(str);      
         return new String(result);
    } 
    catch (IOException e) {
      e.printStackTrace();     
      return "";
    }
  }

Obwohl das Base64-Tool von sun.misc im JDK enthalten ist, gehört es nicht zur Standardbibliothek und kann daher nicht direkt in Eclipse verwendet werden. Es kann durch manuelle Einführung verwendet werden.

Lösung:

Klicken Sie mit der rechten Maustaste auf das Projekt->Eigenschaften->Java Build Path->Bibliotheken, klicken Sie auf Externe Jars hinzufügen und wählen Sie %JAVA_HOME%jrelibrt.jar aus.

Methode 2

Verwenden Sie das Commons-Code-Paket von Apache. Diese Methode ist etwas schneller als die sun.misc-Methode.

Der Code lautet wie folgt

  /**
   * commons-code方式Base64编码
   * @param str
   * @return
   */
  public static String encodeByCommonsCode(String str) {    
      byte[] result;    
      try {
      result = org.apache.commons.codec.binary.Base64.encodeBase64(str.getBytes("UTF-8"));      
      return new String(result);
    } 
    catch (UnsupportedEncodingException e) {
      e.printStackTrace();      
      return "";
    }
  }  
  /**
   * commons-code方式Base64解码
   * @param str
   * @return
   */
  public static String decodeByCommonsCode(String str) {    
      byte[] result = org.apache.commons.codec.binary.Base64.decodeBase64(str.getBytes());    
      return new String(result);
  }

Die Verwendung von Commons-Code erfordert die Einführung von Abhängigkeiten. Am Beispiel des Gradle-Projekts müssen Sie build.gradle die folgenden Zeilen hinzufügen:

implementation 'commons-codec:commons-codec:1.11'

Methode 3

Verwenden Sie das Xerces-Tool von Apache. Dieses Tool wird hauptsächlich zum Parsen von XML verwendet und verfügt über Base64-Kodierungs- und Dekodierungsfunktionen.

Der Code lautet wie folgt:

  /**
   * xerces方式Base64解码
   * @param str
   * @return
   */
  public static String decodeByXerces(String str) {    
     try {      
         byte[] result = com.sun.org.apache.xerces.internal.impl.dv.util.Base64.decode(str);      
         return new String(result);
    } 
    catch (Exception e) {
      e.printStackTrace();      return "";
    }
  }  
  /**
   * Java8中的Base64编码
   * @param str
   * @return
   */
  public static String encodeByJava8(String str) {    
      try {      
         return Base64.getEncoder().encodeToString(str.getBytes("UTF-8"));
    } 
    catch (Exception e) {
      e.printStackTrace();      
      return "";
    }
  }

Methode 4

Die Util-Suite von Java8 enthält bereits Base64-Kodierungs- und Dekodierungstools, und das ist auch der Fall sehr effizient. Es wird empfohlen, diese Methode zu verwenden.

Der Code lautet wie folgt:

  /**
   * Java8中的Base64编码
   * @param str
   * @return
   */
  public static String encodeByJava8(String str) {    
      try {      
         return Base64.getEncoder().encodeToString(str.getBytes("UTF-8"));
    } 
    catch (Exception e) {
      e.printStackTrace();      
      return "";
    }
  }  
  /**
   * Java8中的Base64解码
   * @param str
   * @return
   */
  public static String decodeByJava8(String str) {    
       byte[] result = Base64.getDecoder().decode(str.getBytes());    
       return new String(result);
  }

Testen Sie mehrere Codierungseffekte:

Der Testcode lautet wie folgt:

  private static void testEncodeAndDecode(String src) {
    String encedeStr1 = encodeBySunMisc(src);
    System.out.println("encode by sun misc: " + encedeStr1);
    
    String decedeStr1 = decodeBySunMisc(encedeStr1);
    System.out.println("decode by sun misc: " + decedeStr1);
    
    
    String encedeStr2 = encodeByCommonsCode(src);
    System.out.println("encode by commons-code: " + encedeStr2);
    
    String decedeStr2 = decodeByCommonsCode(encedeStr2);
    System.out.println("decode by commons-code: " + decedeStr2);

    
    String encedeStr3 = encodeByXerces(src);
    System.out.println("encode by xerces: " + encedeStr3);
    
    String decodeStr3 = decodeByXerces(encedeStr3);
    System.out.println("decode by xerces: " + decodeStr3);

    
    String encedeStr4 = encodeByJava8(src);
    System.out.println("encode by java8: " + encedeStr4);
    
    String decedeStr4 = decodeByJava8(encedeStr4);
    System.out.println("decode by java8: " + decedeStr4);
  }

Die Testergebnisse lauten wie folgt :

encode by sun misc: YWJjZGVmZ2hpamtsbW5vcHFyc3Q7
decode by sun misc: abcdefghijklmnopqrst;
encode by commons-code: YWJjZGVmZ2hpamtsbW5vcHFyc3Q7
decode by commons-code: abcdefghijklmnopqrst;
encode by xerces: YWJjZGVmZ2hpamtsbW5vcHFyc3Q7
decode by xerces: abcdefghijklmnopqrst;
encode by java8: YWJjZGVmZ2hpamtsbW5vcHFyc3Q7
decode by java8: abcdefghijklmnopqrst;

Vergleichen Sie die Effizienz mehrerer Codecs. Verwenden Sie für jede Codierungsmethode mehr als 20 Zeichen, um sie zuerst zu codieren und dann zu decodieren. Vergleichen Sie die Gesamtausführungszeit.

Der Testcode lautet wie folgt:

  // 测试sun.misc编解码效率
  private static void testSunMisc(String src) {    
     long begin = System.currentTimeMillis();    
     for(int i = 0; i < 1000000; i++) {
      String encedeStr1 = encodeBySunMisc(src + i);
      decodeBySunMisc(encedeStr1);
    }    long finish = System.currentTimeMillis();
    System.out.println("sun misc consume: " + (finish - begin) + "ms");
  }  
  // 测试commons-code编解码效率
  private static void testCommonsCode(String src) {    
     long begin = System.currentTimeMillis();    
     for(int i = 0; i < 1000000; i++) {
      String encedeStr1 = encodeByCommonsCode(src + i);
      decodeByCommonsCode(encedeStr1);
    }    long finish = System.currentTimeMillis();
    System.out.println("commons-code consume: " + (finish - begin) + "ms");
  }  
  // 测试xerces编解码效率
  private static void testXerces(String src) {    
      long begin = System.currentTimeMillis();    
      for(int i = 0; i < 1000000; i++) {
      String encedeStr1 = encodeByXerces(src + i);
      decodeByXerces(encedeStr1);
    }    long finish = System.currentTimeMillis();
    System.out.println("xerces consume: " + (finish - begin) + "ms");
  }  
  // 测试Java8编解码效率
  private static void testJava8(String src) {    
     long begin = System.currentTimeMillis();    
     for(int i = 0; i < 1000000; i++) {
      String encedeStr1 = encodeByJava8(src + i);
      decodeByJava8(encedeStr1);
    }    
    long finish = System.currentTimeMillis();
    System.out.println("java 8 consume: " + (finish - begin) + "ms");
  }
  public static void main(String[] args) {
    String src = "abcdefghijklmnopqrst;";

    testSunMisc(src);
    testCommonsCode(src);
    testXerces(src);
    testJava8(src);
  }

Insgesamt dreimal getestet, sind die Ausgabeergebnisse wie folgt:

commons-code consume: 3337ms
sun misc consume: 6532ms
xerces consume: 554ms
java 8 consume: 547ms

commons-code consume: 3148ms
sun misc consume: 6445ms
xerces consume: 498ms
java 8 consume: 466ms

commons-code consume: 3442ms
sun misc consume: 6674ms
xerces consume: 470ms
java 8 consume: 512ms

Schlussfolgerung

Old Sun. Die Methode „misc“ ist am wenigsten effizient, während die Methoden „xerces“ und „Java8“ am effizientesten sind. Aufgrund der Bequemlichkeit von Java8 wird empfohlen, zum Kodieren und Dekodieren direkt das mit Java8 gelieferte Base64-Tool zu verwenden.

Das obige ist der detaillierte Inhalt vonWie implementiert Java die Base64-Kodierung und -Dekodierung? Implementieren Sie 4 Methoden der Base64-Kodierung und -Dekodierung. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:cnblogs.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen