Blob 查看器

原文地址:https://docs.corda.net/blob-inspector.html

对于自定义的二进制序列化格式(binary serialization format)是有很多好处的,但是一个不好的地方是没办法用自然人的方式来查看里边的内容。Blob 查看器工具通过允许将一个二进制 blob 文件(或者一个 URL end-point)的内容输出为 YAML 或者 JSON 的方式解决了这个问题。它使用 JacksonSupport 实现了这个功能。

该工具的最新版本可以从这里下载

想要运行它,只需要简单地将文件或者 URL 作为第一个参数传给它: java -jar blob-inspector.jar <file or URL>

使用 --help 标记查看关于这个命令的所有选项。

当查看你自定义的数据结构的时候,不需要在 classpath 中包含这些类定义的 jars。Blob 查看器(或者更像是一个序列化框架) 能够将任何没有在 classpath 上的 blob 中的类分析出来。

SerializedBytes

一点需要注意的是二进制 blob 可能会包含内置的 SerializedBytes 对象。Blob 查看器不会将他们输出为 Base64 的字符串,而是将他们转换到 Java 对象中,然后再输出。当你在处理像 SignedData 或者其他的带有签名的结构的类(比如节点路径下的 nodeInfo-* 文件或者 network-parameters 文件)的时候你会看到它。比如,node-info 文件的输出会像是: --format=YAML

net.corda.nodeapi.internal.SignedNodeInfo
---
raw:
  class: "net.corda.core.node.NodeInfo"
  deserialized:
    addresses:
    - "localhost:10005"
    legalIdentitiesAndCerts:
    - "O=BankOfCorda, L=London, C=GB"
    platformVersion: 4
    serial: 1527851068715
signatures:
- !!binary |-
  VFRy4frbgRDbCpK1Vo88PyUoj01vbRnMR3ROR2abTFk7yJ14901aeScX/CiEP+CDGiMRsdw01cXt\nhKSobAY7Dw==

--format=JSON

net.corda.nodeapi.internal.SignedNodeInfo
{
  "raw" : {
    "class" : "net.corda.core.node.NodeInfo",
    "deserialized" : {
      "addresses" : [ "localhost:10005" ],
      "legalIdentitiesAndCerts" : [ "O=BankOfCorda, L=London, C=GB" ],
      "platformVersion" : 4,
      "serial" : 1527851068715
    }
  },
  "signatures" : [ "VFRy4frbgRDbCpK1Vo88PyUoj01vbRnMR3ROR2abTFk7yJ14901aeScX/CiEP+CDGiMRsdw01cXthKSobAY7Dw==" ]
}

我们会注意到这个文件其实是一个被序列化的 SignedNodeInfo 对象,它含有一个类型为 SerializedBytes<NodeInfo>raw 属性。这个属性被转换成了 NodeInfo 并且被输出到 deserialized 字段的下边。