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-2019 Delft University of Technology, PO Box 5, 2600 AA, Delft, the Netherlands. All rights reserved. <br>
10   * BSD-style license. See <a href="https://opentrafficsim.org/node/13">OpenTrafficSim License</a>.
11   * <p>
12   * @version $Revision$, $LastChangedDate$, by $Author$, initial version Jan 7, 2019 <br>
13   * @author <a href="https://www.tudelft.nl/averbraeck">Alexander Verbraeck</a>
14   * @author <a href="https://www.tudelft.nl/staff/p.knoppers/">Peter Knoppers</a>
15   * @author <a href="https://www.transport.citg.tudelft.nl">Wouter Schakel</a>
16   */
17  public class Base64Dumper extends Dumper<Base64Dumper>
18  {
19      /**
20       * Construct a new Base64Dumper.
21       * @param addressOffset int; address of the first byte that will be appended
22       */
23      public Base64Dumper(final int addressOffset)
24      {
25          super(addressOffset);
26          addDecoder(new HexAddressDecoder(16));
27          addDecoder(new FixedString(" "));
28          addDecoder(new CharDecoder(16, 4));
29          addDecoder(new FixedString(": "));
30          addDecoder(new Base64Decoder(16, 3));
31          addDecoder(new FixedString("\n"));
32      }
33  
34      /**
35       * Construct a new Base64Dumper with initial address offset 0.
36       */
37      public Base64Dumper()
38      {
39          this(0);
40      }
41  
42      /**
43       * Create a HexDumper object; use it to dump an array of bytes and return the dump as a String.
44       * @param addressOffset int; address of the first byte
45       * @param bytes byte[]; the bytes to hex-dump
46       * @return String; the hexadecimal and character dump of the base64 decoded <code>bytes</code>
47       */
48      public static String base64Dumper(final int addressOffset, final byte[] bytes)
49      {
50          ByteArrayOutputStream baos = new ByteArrayOutputStream();
51          try
52          {
53              new Base64Dumper(addressOffset).setOutputStream(baos).append(bytes).flush();
54          }
55          catch (IOException exception)
56          {
57              // Cannot happen because ByteOutputStream.write(byte[]) cannot fail
58          }
59          return baos.toString();
60      }
61  
62      /**
63       * Create a HexDumper object with addressOffset 0; use it to dump an array of bytes and return the dump as a String.
64       * @param bytes byte[]; the bytes to hex-dump
65       * @return String; the hexadecimal and character dump of the base64 decoded <code>bytes</code>
66       */
67      public static String base64Dumper(final byte[] bytes)
68      {
69          return base64Dumper(0, bytes);
70      }
71  
72      /** {@inheritDoc} */
73      @Override
74      public String toString()
75      {
76          return "Base64Dumper [super=" + super.toString() + "]";
77      }
78  
79  }