⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 objid.java

📁 JAVA基本类源代码,大家可以学习学习!
💻 JAVA
字号:
/* * @(#)ObjID.java	1.28 03/01/23 * * Copyright 2003 Sun Microsystems, Inc. All rights reserved. * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms. */package java.rmi.server;import java.io.DataInput;import java.io.DataOutput;import java.io.EOFException;import java.io.IOException;import java.io.InputStream;import java.io.ObjectInput;import java.io.ObjectOutput;import java.io.OutputStream;import java.security.SecureRandom;import java.util.Random;/** * An <code>ObjID</code> is used to identify a remote object exported * to an RMI runtime.  When a remote object is exported, it is assigned * an object identifier either implicitly or explicitly, depending on * the API used to export. * * <p>The {@link #ObjID()} constructor can be used to generate a unique * object identifier.  Such an <code>ObjID</code> is unique over time * with respect to the host it is generated on. * * The {@link #ObjID(int)} constructor can be used to create a * "well-known" object identifier.  The scope of a well-known * <code>ObjID</code> depends on the RMI runtime it is exported to. * * <p>An <code>ObjID</code> instance contains an object number (of type * <code>long</code>) and an address space identifier (of type * {@link UID}).  In a unique <code>ObjID</code>, the address space * identifier is unique with respect to a given host over time.  In a * well-known <code>ObjID</code>, the address space identifier is * equivalent to one returned by invoking the {@link UID#UID(short)} * constructor with the value zero. * * <p>If the system property <code>java.rmi.server.randomIDs</code> * is defined to equal the string <code>"true"</code> (case insensitive), * then the {@link #ObjID()} constructor will use a cryptographically * strong random number generator to choose the object number of the * returned <code>ObjID</code>. * * @author	Ann Wollrath * @author	Peter Jones * @version	1.28, 03/01/23 * @since	JDK1.1 */public final class ObjID implements java.io.Serializable {    /** Object number for well-known <code>ObjID</code> of the registry. */    public static final int REGISTRY_ID = 0;    /** Object number for well-known <code>ObjID</code> of the activator. */    public static final int ACTIVATOR_ID = 1;    /**     * Object number for well-known <code>ObjID</code> of     * the distributed garbage collector.     */    public static final int DGC_ID = 2;    /** indicate compatibility with JDK 1.1.x version of class */    private static final long serialVersionUID = -6386392263968365220L;    private static final UID mySpace;    private static final Random generator;    /**     * @serial object number     * @see #hashCode     */    private final long objNum;    /**     * @serial address space identifier (unique to host over time)     */    private final UID space;    /**     * Generates a unique object identifier.     *     * <p>If the system property <code>java.rmi.server.randomIDs</code>     * is defined to equal the string <code>"true"</code> (case insensitive),     * then this constructor will use a cryptographically     * strong random number generator to choose the object number of the     * returned <code>ObjID</code>.     */    public ObjID() {	/*	 * Create a new UID if the SecureRandom generator is used (mySpace	 * will be null in this case).  Using a different UID for each ObjID	 * ensures that ObjIDs will be unique in this VM incarnation when	 * paired with the result of the secure random number generator.	 */	space = (mySpace != null) ? mySpace : new UID();	objNum = generator.nextLong();    }    /**     * Creates a "well-known" object identifier.     *     * <p>An <code>ObjID</code> created via this constructor will not     * clash with any <code>ObjID</code>s generated via the no-arg     * constructor.     *     * @param	objNum object number for well-known object identifier     */    public ObjID(int objNum) {	space = new UID((short) 0);	this.objNum = objNum;    }    /**     * Constructs an object identifier given data read from a stream.     */    private ObjID(long objNum, UID space) {	this.objNum = objNum;	this.space = space;    }    /**     * Marshals a binary representation of this <code>ObjID</code> to     * an <code>ObjectOutput</code> instance.     *     * <p>Specifically, this method first invokes the given stream's     * {@link ObjectOutput#writeLong(long)} method with this object     * identifier's object number, and then it writes its address     * space identifier by invoking its {@link UID#write(DataOutput)}     * method with the stream.     *     * @param	out the <code>ObjectOutput</code> instance to write     * this <code>ObjID</code> to     *     * @throws	IOException if an I/O error occurs while performing     * this operation     */    public void write(ObjectOutput out) throws IOException {	out.writeLong(objNum);	space.write(out);    }    /**     * Constructs and returns a new <code>ObjID</code> instance by     * unmarshalling a binary representation from an     * <code>ObjectInput</code> instance.     *     * <p>Specifically, this method first invokes the given stream's     * {@link ObjectInput#readLong()} method to read an object number,     * then it invokes {@link UID#read(DataInput)} with the     * stream to read an address space identifier, and then it     * creates and returns a new <code>ObjID</code> instance that     * contains the object number and address space identifier that     * were read from the stream.     *     * @param	in the <code>ObjectInput</code> instance to read     * <code>ObjID</code> from     *     * @return	unmarshalled <code>ObjID</code> instance     *     * @throws	IOException if an I/O error occurs while performing     * this operation     */    public static ObjID read(ObjectInput in) throws IOException {	long num = in.readLong();	UID space = UID.read(in);	return new ObjID(num, space);    }    /**     * Returns the hash code value for this object identifier, the     * object number.     *     * @return	the hash code value for this object identifier     */    public int hashCode() {	return (int) objNum;    }    /**     * Compares the specified object with this <code>ObjID</code> for     * equality.     *     * This method returns <code>true</code> if and only if the     * specified object is an <code>ObjID</code> instance with the same     * object number and address space identifier as this one.     *     * @param	obj the object to compare this <code>ObjID</code> to     *     * @return	<code>true</code> if the given object is equivalent to     * this one, and <code>false</code> otherwise     */    public boolean equals(Object obj) {	if (obj instanceof ObjID) {	    ObjID id = (ObjID)obj;	    return objNum == id.objNum && space.equals(id.space);	} else {	    return false;	}    }    /**     * Returns a string representation of this object identifier.     *     * @return	a string representation of this object identifier     */    /*     * The address space identifier is only included in the string     * representation if it does not denote the local address space     * (or if the randomIDs property was set).     */    public String toString() {	return "[" + (space.equals(mySpace) ? "" : space + ", ") +	    objNum + "]";    }    private static final class InsecureRandom extends Random {	/** unnecessary serialVersionUID to keep watchdog tools happy */	private static final long serialVersionUID = -698228687531590145L;	private long nextNum;	public synchronized long nextLong() {	    return nextNum++;	}    }    static {	boolean randomIDs =	    ((Boolean) java.security.AccessController.doPrivileged(	        new sun.security.action.GetBooleanAction(		    "java.rmi.server.randomIDs"))).booleanValue();	if (randomIDs) {	    generator = new SecureRandom();	    mySpace = null;	} else {	    generator = new InsecureRandom();	    /*	     * The InsecureRandom implementation guarantees that object	     * numbers will not repeat, so the same UID value can be used	     * for all instances of ObjID.	     */	    mySpace = new UID();	}    }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -