View Javadoc
1   package org.djutils.decoderdumper;
2   
3   import java.io.ByteArrayOutputStream;
4   import java.io.IOException;
5   
6   /**
7    * Decode base64 encoded data and dump it in hexadecimal format and (insofar possible) as characters.
8    * <p>
9    * Copyright (c) 2013-2024 Delft University of Technology, PO Box 5, 2600 AA, Delft, the Netherlands. All rights reserved. <br>
10   * BSD-style license. See <a href="https://djutils.org/docs/current/djutils/licenses.html">DJUTILS License</a>.
11   * </p>
12   * @author <a href="https://www.tudelft.nl/averbraeck">Alexander Verbraeck</a>
13   * @author <a href="https://www.tudelft.nl/staff/p.knoppers/">Peter Knoppers</a>
14   */
15  public class Base64Dumper extends Dumper<Base64Dumper>
16  {
17      /**
18       * Construct a new Base64Dumper.
19       * @param addressOffset int; address of the first byte that will be appended
20       */
21      public Base64Dumper(final int addressOffset)
22      {
23          super(addressOffset);
24          addDecoder(new HexAddressDecoder(16));
25          addDecoder(new FixedString(" "));
26          addDecoder(new CharDecoder(16, 4));
27          addDecoder(new FixedString(": "));
28          addDecoder(new Base64Decoder(16, 3));
29          addDecoder(new FixedString("\n"));
30      }
31  
32      /**
33       * Construct a new Base64Dumper with initial address offset 0.
34       */
35      public Base64Dumper()
36      {
37          this(0);
38      }
39  
40      /**
41       * Create a HexDumper object; use it to dump an array of bytes and return the dump as a String.
42       * @param addressOffset int; address of the first byte
43       * @param bytes byte[]; the bytes to hex-dump
44       * @return String; the hexadecimal and character dump of the base64 decoded <code>bytes</code>
45       */
46      public static String base64Dumper(final int addressOffset, final byte[] bytes)
47      {
48          ByteArrayOutputStream baos = new ByteArrayOutputStream();
49          try
50          {
51              new Base64Dumper(addressOffset).setOutputStream(baos).append(bytes).flush();
52              return baos.toString("UTF-8");
53          }
54          catch (IOException exception)
55          {
56              // Cannot happen because ByteOutputStream.write(byte[]) cannot fail and UTF-8 exists
57              return "";
58          }
59      }
60  
61      /**
62       * Create a HexDumper object with addressOffset 0; use it to dump an array of bytes and return the dump as a String.
63       * @param bytes byte[]; the bytes to hex-dump
64       * @return String; the hexadecimal and character dump of the base64 decoded <code>bytes</code>
65       */
66      public static String base64Dumper(final byte[] bytes)
67      {
68          return base64Dumper(0, bytes);
69      }
70  
71      @Override
72      public String toString()
73      {
74          return "Base64Dumper [super=" + super.toString() + "]";
75      }
76  
77  }