当前位置: 首页 > 面试题库 >

了解Java字节码

朱睿
2023-03-14
问题内容

我经常卡在没有源的Java类文件中,并且试图理解我手头的问题。

请注意,反编译器是有用的,但在所有情况下都不足够…

我有两个问题

  1. 有哪些工具可用来查看Java字节码(最好从linux命令行中获得)
  2. 什么是熟悉Java字节码语法的良好参考

问题答案:

与其直接查看Java字节码(需要熟悉Java虚拟机及其操作),不如尝试使用Java反编译实用程序。反编译器将尝试java从指定class文件创建源文件。

该怎么做我“编译” Java类文件?是一个相关的问题,它将有助于找出如何反编译Java class文件。

也就是说,可以使用javapJDK中的命令来反汇编Java
class文件。的输出javap将是class文件中包含的Java字节码。但是请注意,字节码根本不类似于Java源代码。

学习Java字节码和Java虚拟机本身的确切资源是《
Java虚拟机规范,第二版》
。特别是,第6章:Java虚拟机指令集具有所有字节码指令的索引。



 类似资料:
  • 问题内容: 因此,在昨天的工作中,我不得不编写一个应用程序来计算AFP文件中的页数。因此,我整理了我的MO:DCA规范PDF,找到了结构化字段及其3个字节的标识符。该应用程序需要在AIX机器上运行,所以我决定用Java编写它。 为了获得最大效率,我决定读取每个结构化字段的前6个字节,然后跳过该字段中的其余字节。这会让我: 因此,我检查字段类型,如果是,则增加页面计数器,如果不是,则不增加。然后,我

  • 问题内容: 我正处于从文件中读取某些数据作为字节流的过程中,并且刚刚遇到了一些不确定如何处理的unicode字符串。 每个字符使用两个字节,只有第一个看起来包含实际数据,因此,例如,字符串“ trust”在文件中的存储方式为: 通常,我只使用正则表达式将零替换为零,从而删除空格。但是,文件中单词之间的空格是使用来实现的,因此尝试执行一个简单的String’replaceAll’会使它有点混乱。 我

  • 如何获得Kafka单张唱片的大小? 有一些关于我为什么需要这个的说明。 这似乎不是在ConsumerRecord或RecordMetadata类上公开的serializedValueSize。我并不真正理解这个属性的价值,因为它与对消费者有用的消息的大小不匹配。serializedValueSize用于什么? 最大Poll.Records 在对poll()的单个调用中返回的最大记录数。 这并不存在

  • 我有一个用mvn Exec:java运行的程序(我的主文件是用utf-8编码的,系统的默认字符集是windows-1252) 我不明白为什么第一次打印工作,根据文档getBytes使用给定的字符集将字符串编码成字节序列,字符串构造函数通过使用平台的默认字符集解码指定的字节数组来构造新的字符串

  • 问题内容: 我想了解如何将带符号的数字转换为无符号的数字。 可以说我有这个: 为了使其无符号,我必须选择“更大”的数据类型“ short”,并应用值为0x00ff的AND运算符。 为什么使数字无符号? 问题答案: Java实际上没有无符号原语。 值127实际上由“ 01111111”表示,第一位是符号(0为正)。 一个无符号字节将能够保存0到255的值,但是127是有符号字节的最大值。由于一个字节

  • 问题内容: 在服务器(C ++)上,二进制数据使用以下函数压缩: 并将其发送到客户端(Java)。在客户端(Java)上,应使用以下代码段对数据进行解压缩: 问题是,当它尝试读入while循环时,它总是抛出: java.util.zip.ZipException:无效的存储块长度 在检查其他可能原因之前,有人可以告诉我是否可以使用compress2在一侧进行压缩,并在另一侧使用上述代码将其解压缩,