能否仅通过类文件原始字节确定类的二进制名称?
问题解答
能仅通过类文件字节数据确定二进制名称吗?
可以。Java类文件的字节数据中明确包含了类的完整二进制名称信息,具体存储在常量池的CONSTANT_Class_info结构里。这个结构的name_index会指向常量池中的CONSTANT_Utf8_info项,存储的是类的全限定名(用/替代.作为包分隔符),把/替换成.就能得到标准的二进制名称。
比如你提供的例子:
- 编译生成的
Foo.class中,常量池里会存储com/foo/bar/Foo,替换后就是com.foo.bar.Foo; - 内部类
Foo$Bar.class中,常量池里会存储com/foo/bar/Foo$Bar,替换后就是com.foo.bar.Foo$Bar。
网络传输类文件时是否需要额外同步二进制名称?
不需要。接收方只需要解析类文件的字节数据,就能从中提取出完整的二进制名称,完全不需要预先同步或额外传输名称信息。
内容的提问来源于stack exchange,提问作者merlin2011
相关产品推荐
相关产品推荐

