gpt4 book ai didi

Java反编译代码含义

转载 作者:行者123 更新时间:2023-11-30 07:32:11 25 4
gpt4 key购买 nike

我最近反编译了一些 Java 代码,但部分语法我不明白。我已经搜索过这个但是我看到的许多线程都说与此类似的代码依赖于编译器。在 java 语法检查中,这会返回错误。

public void run()
{
try
{
final InputStream inputSocketInputStream = inputSocket.getInputStream();
final OutputStream inputSocketOutputStream = inputSocket.getOutputStream();
Socket socket = new Socket();
socket.connect(new InetSocketAddress(APJP.APJP_LOCAL_HTTP_SERVER_ADDRESS, APJP.APJP_LOCAL_HTTP_SERVER_PORT));
final InputStream outputSocketInputStream = socket.getInputStream();
final OutputStream outputSocketOutputStream = socket.getOutputStream();
Thread thread = new Thread() {

final InputStream val$inputSocketInputStream;
final OutputStream val$outputSocketOutputStream;
final HTTPProxyServerWorker this$0;

public void run()
{
try
{
byte abyte0[] = new byte[5120];
for(int i = 0; (i = inputSocketInputStream.read(abyte0)) != -1;)
{
outputSocketOutputStream.write(abyte0, 0, i);
}

outputSocketOutputStream.close();
}
catch(Exception exception1) { }
}


{
this$0 = HTTPProxyServerWorker.this;
inputSocketInputStream = inputstream;
outputSocketOutputStream = outputstream;
super();
}
};
thread.start();
/** OMITTED **/
}

我对这一点感到困惑:

Thread thread = new Thread() {

final InputStream val$inputSocketInputStream;
final OutputStream val$outputSocketOutputStream;
final HTTPProxyServerWorker this$0;

public void run()
{
try
{
byte abyte0[] = new byte[5120];
for(int i = 0; (i = inputSocketInputStream.read(abyte0)) != -1;)
{
outputSocketOutputStream.write(abyte0, 0, i);
}

outputSocketOutputStream.close();
}
catch(Exception exception1) { }
}

//WHAT IS THIS BELOW? Constructor?
{
this$0 = HTTPProxyServerWorker.this;
inputSocketInputStream = inputstream;
outputSocketOutputStream = outputstream;
super();
}
};

谁能解释这段代码应该如何工作?

最佳答案

这是 non static initialization block .反编译器在非编译源中转换字节码是很常见的。恕我直言,最佳代码由 JD Decompiler 生成。这个变量

            final InputStream val$inputSocketInputStream;
final OutputStream val$outputSocketOutputStream;
final HTTPProxyServerWorker this$0;

是对从非静态内部类访问最终局部变量的解释。变量 this$0 引用包含内部类实例的外部类实例。在这种情况下,内部类是匿名的,因此有初始化 block 而不是构造函数。可以说带有$的变量是由编译器生成的。事实上,这是反编译器对字节码的解释。

关于Java反编译代码含义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6749374/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com