La migration de soleil.misc.BASE64 pour Java 8 java.util.Base64

Question

Sont le Java 8 java.util.Base64 MIME de l'Encodeur et du Décodeur une baisse-dans le remplacement pour la prise en charge interne de l'API Java sun.misc.BASE64Encoder et sun.misc.BASE64Decoder?

Ce que je pense jusqu'à présent et pourquoi

Basé sur mes recherches et de tests rapides (voir code ci-dessous) il devrait être une baisse-dans le remplacement parce que

  • sun.misc.BASE64Encoder basé sur sa JavaDoc est BASE64 Caractère codeur tel que spécifié dans RFC1521. Cette RFC est une partie de la MIME spécification...
  • java.util.Base64 basé sur son JavaDoc Utilise L'Alphabet Base64", comme indiqué dans le Tableau 1 de RFC 2045 pour l'encodage et le décodage de l'opération... sous MIME

En supposant qu'aucun changement significatif dans la RFC 1521 et 2045 (je ne pouvais pas trouver tout) et d'après mon test rapide à l'aide de Java 8 MIME Base64 Encodeur/Décodeur doit être fine.

Ce que je suis à la recherche d'

  • une source officielle, confirmer ou infirmer l' "remplacement" drop-in" point OU
  • un contre-exemple qui montre un cas où java.util.Base64 a des comportements différents que le soleil.misc.BASE64Encoder OpenJDK Java 8 mise en œuvre (8u40-b25) (BASE64Decoder) OU
  • ce que vous pensez réponses à la question ci-dessus certainement

De référence

Mon code de test

public class Base64EncodingDecodingRoundTripTest {
public static void main(String[] args) throws IOException {
String test1 = " ~!@#$%^& *()_+=`| }{[]\\;: \"?><,./";
String test2 = test1 + test1;
encodeDecode(test1);
encodeDecode(test2);
}
static void encodeDecode(final String testInputString) throws IOException {
sun.misc.BASE64Encoder unsupportedEncoder = new sun.misc.BASE64Encoder();
sun.misc.BASE64Decoder unsupportedDecoder = new sun.misc.BASE64Decoder();
Base64.Encoder mimeEncoder = java.util.Base64.getMimeEncoder();
Base64.Decoder mimeDecoder = java.util.Base64.getMimeDecoder();
String sunEncoded = unsupportedEncoder.encode(testInputString.getBytes());
System.out.println("sun.misc encoded: " + sunEncoded);
String mimeEncoded = mimeEncoder.encodeToString(testInputString.getBytes());
System.out.println("Java 8 Base64 MIME encoded: " + mimeEncoded);
byte[] mimeDecoded = mimeDecoder.decode(sunEncoded);
String mimeDecodedString = new String(mimeDecoded, Charset.forName("UTF-8"));
byte[] sunDecoded = unsupportedDecoder.decodeBuffer(mimeEncoded); //throws IOException
String sunDecodedString = new String(sunDecoded, Charset.forName("UTF-8"));
System.out.println(String.format("sun.misc decoded: %s | Java 8 Base64 decoded:  %s", sunDecodedString, mimeDecodedString));
System.out.println("Decoded results are both equal: " + Objects.equals(sunDecodedString, mimeDecodedString));
System.out.println("Mime decoded result is equal to test input string: " + Objects.equals(testInputString, mimeDecodedString));
System.out.println("\n");
}
}
  • Qu'entendez-vous par la baisse-dans le remplacement? Êtes-vous juste de parler à propos de l'encodage/décodage de comportement?
  • Je veux dire par la baisse-dans le remplacement que je peux passer de l'héritage de code à l'aide du soleil.misc.BASE64Encoder et du soleil.misc.BASE64Decoder de Java 8 MIME Base64 Encodeur/Décodeur d'un autre code client de manière transparente. Cela semble être le cas, mais j'aime bien avoir une référence, confirmant ce ou une "preuve" que ce n'est pas le cas, sinon.
  • Oui, vous pouvez changer le code héritage à la nouvelle Java 8 Base64 Codeur/Décodeur. Ils seront toujours produire le même résultat.
  • Pertinentes pour demander qui codeur classe à utiliser?
InformationsquelleAutor Ivo Mori | 2016-02-09