反编译scala';Android Studio中的s.class文件生成.java文件?
首先,我对Scala和.class文件都不太了解(来自java和Scala) 我正在安卓上移植。项目中使用的一个库是反编译scala';Android Studio中的s.class文件生成.java文件?,java,android,scala,Java,Android,Scala,首先,我对Scala和.class文件都不太了解(来自java和Scala) 我正在安卓上移植。项目中使用的一个库是flink runtime.jar,包含以下Scala文件: def setMemory(config: Configuration): Unit = { // set this only if no memory was pre-configured if (config.getInteger(ConfigConstants.TASK_MANAGER_MEMO
flink runtime.jar
,包含以下Scala文件:
def setMemory(config: Configuration): Unit = {
// set this only if no memory was pre-configured
if (config.getInteger(ConfigConstants.TASK_MANAGER_MEMORY_SIZE_KEY, -1) == -1) {
val bufferSize: Int = config.getInteger(
ConfigConstants.TASK_MANAGER_MEMORY_SEGMENT_SIZE_KEY,
ConfigConstants.DEFAULT_TASK_MANAGER_MEMORY_SEGMENT_SIZE)
val bufferMem: Long = config.getLong(
ConfigConstants.TASK_MANAGER_NETWORK_NUM_BUFFERS_KEY,
ConfigConstants.DEFAULT_TASK_MANAGER_NETWORK_NUM_BUFFERS) * bufferSize.toLong
val numTaskManager = config.getInteger(
ConfigConstants.LOCAL_NUMBER_TASK_MANAGER,
ConfigConstants.DEFAULT_LOCAL_NUMBER_TASK_MANAGER)
val memoryFraction = config.getFloat(
ConfigConstants.TASK_MANAGER_MEMORY_FRACTION_KEY,
ConfigConstants.DEFAULT_MEMORY_MANAGER_MEMORY_FRACTION)
// full memory size
var memorySize: Long = EnvironmentInformation.getSizeOfFreeHeapMemoryWithDefrag
// compute the memory size per task manager. we assume equally much memory for
// each TaskManagers and each JobManager
memorySize /= numTaskManager + 1 // the +1 is the job manager
// for each TaskManager, subtract the memory needed for memory buffers
memorySize -= bufferMem
memorySize = (memorySize * memoryFraction).toLong
memorySize >>>= 20 // bytes to megabytes
config.setLong(ConfigConstants.TASK_MANAGER_MEMORY_SIZE_KEY, memorySize)
}
}
runtime/minicluster/LocalFlinkMiniCluster.scala
Intellij IDEA反编译包含.jar
文件的LocalFlinkMiniCluster.class
时,将显示正确且原始的LocalFlinkMiniCluster.scala
这在Android studio中不会发生。相反,返回的java代码包含以下消息:
反编译的.class文件,字节码版本:50.0(Java6)
为了让您更好地理解我所说的内容,以下是原始.scala文件中的方法setMemory
:
def setMemory(config: Configuration): Unit = {
// set this only if no memory was pre-configured
if (config.getInteger(ConfigConstants.TASK_MANAGER_MEMORY_SIZE_KEY, -1) == -1) {
val bufferSize: Int = config.getInteger(
ConfigConstants.TASK_MANAGER_MEMORY_SEGMENT_SIZE_KEY,
ConfigConstants.DEFAULT_TASK_MANAGER_MEMORY_SEGMENT_SIZE)
val bufferMem: Long = config.getLong(
ConfigConstants.TASK_MANAGER_NETWORK_NUM_BUFFERS_KEY,
ConfigConstants.DEFAULT_TASK_MANAGER_NETWORK_NUM_BUFFERS) * bufferSize.toLong
val numTaskManager = config.getInteger(
ConfigConstants.LOCAL_NUMBER_TASK_MANAGER,
ConfigConstants.DEFAULT_LOCAL_NUMBER_TASK_MANAGER)
val memoryFraction = config.getFloat(
ConfigConstants.TASK_MANAGER_MEMORY_FRACTION_KEY,
ConfigConstants.DEFAULT_MEMORY_MANAGER_MEMORY_FRACTION)
// full memory size
var memorySize: Long = EnvironmentInformation.getSizeOfFreeHeapMemoryWithDefrag
// compute the memory size per task manager. we assume equally much memory for
// each TaskManagers and each JobManager
memorySize /= numTaskManager + 1 // the +1 is the job manager
// for each TaskManager, subtract the memory needed for memory buffers
memorySize -= bufferMem
memorySize = (memorySize * memoryFraction).toLong
memorySize >>>= 20 // bytes to megabytes
config.setLong(ConfigConstants.TASK_MANAGER_MEMORY_SIZE_KEY, memorySize)
}
}
这是Android Studio创建的java版本(亚洲符号到底是什么?)
显然,这两种方法的执行效果不同
请问,你能帮我理解为什么会发生这种情况,我如何解决这个问题?谢谢 我自己发现了问题:Scala插件默认安装在IntelliJ上(或者在向导中有一个选项)。在Android Studio中,它必须手动安装。根据一本在线词典,亚洲符号的意思是“闪耀;闪耀;闪耀”。除此之外,我不知道如何提供帮助,也不确定您所做的是否被称为“移植”。+1了解有关亚洲符号含义的真正有用信息。但我仍然需要理解为什么会发生这种情况。你确定Intellij Idea反编译.class文件吗?评论将如何呈现?正如您在java版本中看到的,常量是内联的,所以我猜亚洲符号是,在转换为int等于
ConfigConstants之后。默认值\u任务\u管理器\u内存\u段\u大小
为什么要反编译类文件而不使用flink源代码?另一个原因可能是:IntelliJ使用了依赖项的源代码,在Android Studio中设置的方式可能不同。这就是为什么您在IntelliJ中看到原始源代码,而Android Studio反编译类文件。