4

java.lang.Class 是否与实际的 .class 文件相同?即内容是否等效?

我想通过套接字发送 .class ,并且想知道是否不是尝试查找和加载实际的 .class 文件,是否可以只传输 java.lang.Class ?

详细说明(如果您想了解更多信息,请阅读)

假设我有一个名为 SomeObj 的 Java 类。编译此文件时,将生成一个名为 SomeObj.class 的文件。

我们还知道,如果我有 SomeObj 作为类型,我们可以通过执行以下操作获取它的 java.lang.Class 类型:

Class someObjClss = SomeObj.class;

我们知道java.lang.Class实现了Serializable,因此可以传输。

那么 java.lang.Class 基本上是实际 .class 文件的对象表示吗?

更新:

假设我已将 .class 文件传输到另一台主机,我是否只使用 defineClass() 方法来构造该类?

链接在这里

更新2:

此代码确实返回 null InputStream。这怎么可能?

Class clazz = String.class;

String className = clazz.getName(); System.out.println(className);
URL url = clazz.getResource(className);
if( url != null )
{
  String pathName = url.getPath(); System.out.println(className);
}

InputStream inputStream = clazz.getResourceAsStream(className);
if(inputStream != null )
{
  System.out.println(inputStream.available());
}
4

4 回答 4

5

没有。java.lang.Class是一个java类。它有自己的 .class 文件 :-) 的实例java.lang.Class用于表示对象的类,允许您对其执行某些操作(例如使用反射 API)。

序列化与 .class 文件完全无关 - 它是被序列化的对象状态。如果您要序列化Class<MyObject>并通过线路将其发送到没有 MyObject.class 的 JVM,它仍然不知道 MyObject 是什么。

为什么您需要手动通过网络发送 .class 开始?有远程类加载器来处理这个问题。

于 2009-11-20T04:05:00.513 回答
2

实例与相应的java.lang.Class“.class”文件相关,但它们绝不是等价的。

java.lang.Class实例对“.class”文件的类型签名进行编码,但不多。因此,尽管 ajava.lang.Class可以被序列化,但这样做并不能为您提供足够的能力以允许在另一端实例化相应类的实例。如果你想这样做,你应该发送“.class”文件。

于 2009-11-20T04:34:04.133 回答
1

我认为 OP 正在尝试识别类文件所在的类路径上的文件。见http://asolntsev.blogspot.com/2008/03/how-to-find-which-jar-file-contains.html

于 2009-11-20T05:37:41.400 回答
0

看看RMI(远程方法调用)

于 2009-11-20T04:23:42.220 回答