On Tue, 9 Mar 2021 21:37:16 GMT, Roger Riggs <rri...@openjdk.org> wrote:

> ObjectStreamPrinter is a Formatter plugin to the test library HexPrinter.
> 
> A binary stream of serialized java objects is converted into a textual form 
> by parsing the header, typecodes, and interpreting the stream contents. The 
> formatter can be used standalone or with the HexPrinter to align the 
> formatted stream with the corresponding hexadecimal bytes.
> 
> StreamDump is a test utility to pass the contents of a file to the HexPrinter 
> utility. The format of the file is guessed from the encoding and initial 
> bytes. ASN.1 and serialized object streams are supported.

The idea is to provide a fairly literal interpretation of the stream contents 
with annotations to make it easy to read and understand the nesting, object 
handle assignments, internal references, class descriptors, and block data 
usage.

A Hashmap with three key/value pairs is formatted:
    Map<String, String> map = new HashMap<>();
    map.put("1", "One");
    map.put("2", "Two");
    map.put("2.2", "Two");

0000: ac ed 00 05                                      // ObjectStream Version: 
5
0004:             73 72 00 11 6a 61 76 61 2e 75 74 69  // READ CLASSDESC #0 
java.util.HashMap
0010: 6c 2e 48 61 73 68 4d 61 70                       // 
0019:                            05 07 da c1 c3 16 60  //   svid: 
362498820763181265L
0020: d1                                               // 
0021:    03                                            //   flags: 
WRITE_OBJECT, SERIALIZABLE
0022:       00 02                                      //   2 field(s) {
0024:             46 00 0a 6c 6f 61 64 46 61 63 74 6f  //     F loadFactor 
float; 
0030: 72                                               // 
0031:    49 00 09 74 68 72 65 73 68 6f 6c 64           //     I threshold int; 
003d:                                        78        //   } ENDBLOCK; 
003e:                                           70     //   Super: NULL; 
003f:                                                  // OBJ #1 
java.util.HashMap 
003f:                                              3f  //   loadFactor:0.75 
0040: 40 00 00                                         // 
0043:          00 00 00 0c                             //   threshold:12 
0047:                                                  //   CustomData: 
0047:                      77 08 00 00 00 10 00 00 00  //     BLOCKDATA 8[ 
........]; 
0050: 03                                               // 
0051:    74 00 01 31                                   //     STRING #2 "1" 
0055:                74 00 03 4f 6e 65                 //     STRING #3 "One" 
005b:                                  74 00 01 32     //     STRING #4 "2" 
005f:                                              74  //     STRING #5 "Two" 
0060: 00 03 54 77 6f                                   // 
0065:                74 00 03 32 2e 32                 //     STRING #6 "2.2" 
006b:                                  71 00 7e 00 05  //     REF #5 Two 
0070: 78                                               //     ENDBLOCK; 

The tests include a number of other examples.

-------------

PR: https://git.openjdk.java.net/jdk/pull/2900

Reply via email to