【发布时间】:2011-07-19 23:19:12
【问题描述】:
我最近反编译了一些 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();
}
};
谁能解释一下这段代码应该如何工作?
【问题讨论】:
-
@matt b:但是假设输入和输出流是在外部块中定义的(可能是真的),这是完全有效的 java。
-
@Voo -
val$inputStream是一个有效的标识符,但$没有特殊含义 - 所以反编译器产生未初始化的声明很奇怪,除非这里只是省略了赋值。然而,更大的一点是存在的。
标签: java decompiling