View Javadoc
1   package org.djutils.serialization;
2   
3   import java.io.ByteArrayOutputStream;
4   import java.io.IOException;
5   
6   import org.djutils.decoderdumper.Dumper;
7   import org.djutils.decoderdumper.FixedString;
8   import org.djutils.decoderdumper.HexAddressDecoder;
9   import org.djutils.decoderdumper.HexDecoder;
10  
11  /**
12   * Dumper for serialized data.
13   * <p>
14   * Copyright (c) 2019-2019 Delft University of Technology, PO Box 5, 2600 AA, Delft, the Netherlands. All rights reserved. <br>
15   * BSD-style license. See <a href="http://opentrafficsim.org/docs/license.html">OpenTrafficSim License</a>.
16   * <p>
17   * $LastChangedDate: 2019-06-07 01:33:02 +0200 (Mon, 7 Jun 2019) $, @version $Revision: 1401 $, by $Author: pknoppers $, initial
18   * version Jun 27, 2019 <br>
19   * @author <a href="http://www.tbm.tudelft.nl/averbraeck">Alexander Verbraeck</a>
20   * @author <a href="http://www.tudelft.nl/pknoppers">Peter Knoppers</a>
21   */
22  public class SerialDataDumper extends Dumper<SerialDataDumper>
23  {
24      /**
25       * Construct a new SerialDataDumper.
26       * @param endianUtil EndianUtil; used to decode multi-byte values
27       * @param addressOffset int; address of the first byte that will be processed
28       */
29      public SerialDataDumper(final EndianUtil endianUtil, final int addressOffset)
30      {
31          super(addressOffset);
32          addDecoder(new HexAddressDecoder(16));
33          addDecoder(new FixedString(": "));
34          addDecoder(new HexDecoder(16, 8));
35          addDecoder(new FixedString("  "));
36          addDecoder(new SerialDataDecoder(endianUtil));
37          addDecoder(new FixedString("\n"));
38      }
39  
40      /**
41       * Construct a new SerialDataDumper.
42       * @param endianUtil EndianUtil; used to decode multi-byte values
43       */
44      public SerialDataDumper(final EndianUtil endianUtil)
45      {
46          this(endianUtil, 0);
47      }
48  
49      /**
50       * Create a SerialDataDumper object; use it to dump an array of bytes and return the dump as a String.
51       * @param endianUtil EndianUtil; used to decode multi-byte values
52       * @param addressOffset int; address of the first byte
53       * @param bytes byte[]; the bytes to hex-dump
54       * @return String; the hexadecimal and character dump of the <code>bytes</code>
55       */
56      public static String serialDataDumper(final EndianUtil endianUtil, final int addressOffset, final byte[] bytes)
57      {
58          ByteArrayOutputStream baos = new ByteArrayOutputStream();
59          try
60          {
61              new SerialDataDumper(endianUtil, addressOffset).setOutputStream(baos).append(bytes).flush();
62          }
63          catch (IOException exception)
64          {
65              // Cannot happen because ByteOutputStream.write(byte[]) cannot fail
66          }
67          return baos.toString();
68      }
69  
70      /**
71       * Create a SerialDataDumper object with addressOffset 0; use it to dump an array of bytes and return the dump as a String.
72       * @param endianUtil EndianUtil; used to decode multi-byte values
73       * @param bytes byte[]; the bytes to hex-dump
74       * @return String; the hexadecimal and character dump of the <code>bytes</code>
75       */
76      public static String serialDataDumper(final EndianUtil endianUtil, final byte[] bytes)
77      {
78          return serialDataDumper(endianUtil, 0, bytes);
79      }
80  
81      /** {@inheritDoc} */
82      @Override
83      public String toString()
84      {
85          return "SerialDataDumper [super=" + super.toString() + "]";
86      }
87  
88  }