Frage

Is java.lang.Class die gleiche wie die tatsächliche .class-Datei? das heißt der Inhalt äquivalent?

Ich möchte die .class- über Buchse senden, und frage mich, statt, wenn der Versuch, die tatsächlichen Class-Datei zu finden und zu laden, wenn ich nur an Stelle der java.lang.Class übertragen könnte?

Ausarbeitung (lesen Sie, wenn Sie weitere Informationen wünschen)

Angenommen, ich eine Java-Klasse namens someObj. Wenn diese Datei kompiliert wird, wird eine Datei mit dem Namen SomeObj.class erzeugt werden.

Wir wissen auch, dass, wenn ich someObj als eine Art haben wir seine java.lang.Class Art, indem Sie bekommen konnte:

Class someObjClss = SomeObj.class;

Wir wissen, java.lang.Class Geräte Serializable, so kann sie übertragen werden.

So ist java.lang.Class im Grunde die Objektdarstellung der tatsächlichen .class-Datei?

UPDATE:

Unter der Annahme, ich die .class-Datei übertragen haben, auf einen anderen Host, verwende ich nur die defineClass () -Methode der Klasse zurück zu konstruieren?

Link hier

UPDATE2:

Dieser Code führt kehrt null Input. Wie ist das möglich?

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());
}
War es hilfreich?

Lösung

Nein. java.lang.Class ist eine Java-Klasse. Es hat seine eigene .class-Datei :-) Ein Beispiel: von java.lang.Class auf verwendet repräsentieren Klasse des Objekts so dass Sie bestimmte Operationen (zB Verwendung Reflexion API) auf, es auszuführen .

Serialisierung hat nichts mit .class-Datei überhaupt zu tun - es ist Objektzustand , die serialisiert wird. Wenn Sie serialisiert Class<MyObject> und senden sind, dass auf eine JVM über den Draht, der nicht MyObject.class hat, wäre es immer noch nicht wissen, was MyObject ist.

Warum brauchen Sie auf manuell senden .class- über den Draht zu beginnen? Es gibt Remote Classloader damit umgehen.

Andere Tipps

A java.lang.Class-Instanz zu einer entsprechenden „.class-“ Datei verwendet, aber sie sind keineswegs gleichwertig.

Die java.lang.Class Instanz codiert die Art Signatur für einen „.class“ -Datei, aber nicht viel mehr. Also, wenn ein java.lang.Class serialisiert werden kann, so dass nicht mit genug bieten Sie nicht tut einer Instanz der entsprechenden Klasse zu ermöglichen, am anderen Ende instanziiert werden. Wenn Sie das tun wollen, sollten Sie die „.class“ Datei senden.

Ich denke, die OP versucht, eine Datei auf dem Classpath zu identifizieren, in denen die Klassendatei vorhanden ist. Siehe http: //asolntsev.blogspot .com / 2008/03 / how-to-find-das-jar-Datei-contains.html

Hier finden Sie aktuelle RMI (Remote Method Invocation) .

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top