对于自定义的二进制序列化格式(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
字段的下边。