001/* ObjectStreamConstants.java -- Interface containing constant values
002   used in reading and writing serialized objects
003   Copyright (C) 1998, 1999, 2003, 2006 Free Software Foundation, Inc.
004
005This file is part of GNU Classpath.
006
007GNU Classpath is free software; you can redistribute it and/or modify
008it under the terms of the GNU General Public License as published by
009the Free Software Foundation; either version 2, or (at your option)
010any later version.
011 
012GNU Classpath is distributed in the hope that it will be useful, but
013WITHOUT ANY WARRANTY; without even the implied warranty of
014MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
015General Public License for more details.
016
017You should have received a copy of the GNU General Public License
018along with GNU Classpath; see the file COPYING.  If not, write to the
019Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
02002110-1301 USA.
021
022Linking this library statically or dynamically with other modules is
023making a combined work based on this library.  Thus, the terms and
024conditions of the GNU General Public License cover the whole
025combination.
026
027As a special exception, the copyright holders of this library give you
028permission to link this library with independent modules to produce an
029executable, regardless of the license terms of these independent
030modules, and to copy and distribute the resulting executable under
031terms of your choice, provided that you also meet, for each linked
032independent module, the terms and conditions of the license of that
033module.  An independent module is a module which is not derived from
034or based on this library.  If you modify this library, you may extend
035this exception to your version of the library, but you are not
036obligated to do so.  If you do not wish to do so, delete this
037exception statement from your version. */
038
039
040package java.io;
041
042/**
043 * This interface contains constants that are used in object
044 * serialization.  This interface is used by <code>ObjectOutputStream</code>,
045 * <code>ObjectInputStream</code>, and <code>ObjectStreamClass</code>.
046 * The values for these constants are specified by the Java library
047 * specification.
048 * 
049 * @since 1.1
050 */
051public interface ObjectStreamConstants
052{
053  /** 
054   * The serialization stream protocol version 1. This version was
055   * the default serialization protocol before JDK 1.2.
056   * 
057   * @see ObjectOutputStream#useProtocolVersion(int)
058   * @since 1.2
059   */
060  int PROTOCOL_VERSION_1 = 1;
061  
062  /** 
063   * The serialization stream protocol version 2. This version is
064   * used as the default serialization protocol since JDK 1.2.
065   * 
066   * @see ObjectOutputStream#useProtocolVersion(int)
067   * @since 1.2
068   */
069  int PROTOCOL_VERSION_2 = 2;
070
071  /**
072   * The magic number that is written as part of the stream header.
073   */
074  short STREAM_MAGIC = (short)0xaced;
075  
076  /**
077   * The stream version number that is written as part of the stream header.
078   * Note that this is different from the protocol version that specifies
079   * the data format for the stream.
080   */
081  short STREAM_VERSION = 5;
082
083  /**
084   * Token value to designate a <code>null</code> reference in the stream.
085   */
086  byte TC_NULL = (byte)112;            //0x70
087  
088  /**
089   * Token value to designate a reference to an already serialized object.
090   */
091  byte TC_REFERENCE = (byte)113;       //0x71
092  
093  /**
094   * Token value to designate a class descriptor is next in the stream.
095   */
096  byte TC_CLASSDESC = (byte)114;       //0x72
097  
098  /**
099   * Token value to designate a new object is next in the stream. 
100   */
101  byte TC_OBJECT = (byte)115;          //0x73
102  
103  /**
104   * Token value to designate a new string is next in the stream.
105   */
106  byte TC_STRING = (byte)116;          //0x74
107  
108  /**
109   * Token value to designate a new array is next in the stream.
110   */
111  byte TC_ARRAY = (byte)117;           //0x75
112  
113  /**
114   * Token reference to designate a reference to a class.
115   */
116  byte TC_CLASS = (byte)118;           //0x76
117  
118  /**
119   * Token value to designate a block of primitive data is next in the stream.
120   * The next byte in the stream holds the size of the block (in bytes).
121   */
122  byte TC_BLOCKDATA = (byte)119;       //0x77
123  
124  /**
125   * Token value to designate the end of a block of primitve data.
126   */
127  byte TC_ENDBLOCKDATA = (byte)120;    //0x78
128  
129  /**
130   * Token value to designate a reset of the stream state.
131   */
132  byte TC_RESET = (byte)121;           //0x79
133  
134  /**
135   * Token value to designate a long block of primitive data is next in the
136   * stream. The next long in the stream holds the size of the block
137   * (in bytes). 
138   */
139  byte TC_BLOCKDATALONG = (byte)122;   //0x7A
140  
141  /**
142   * Token value to designate an exception occured during serialization.
143   */
144  byte TC_EXCEPTION = (byte)123;       //0x7B
145  
146  /**
147   * Token value to designate a long string is next in the stream.
148   */
149  byte TC_LONGSTRING = (byte)124;      //0x7C
150  
151  /**
152   * Token value to designate a proxy class descriptor is next in the stream.
153   */
154  byte TC_PROXYCLASSDESC = (byte)125;  //0x7D
155
156  /**
157   * Token value to designate an enum constant is next in the stream.
158   * 
159   * @since 1.5
160   */
161  byte TC_ENUM = (byte)126;            //0x7E
162  
163  /**
164   * The first token value.
165   */
166  byte TC_BASE = TC_NULL;
167  
168  /**
169   * The last token value.
170   */
171  byte TC_MAX = TC_ENUM;
172
173  /**
174   * The first handle that will be assigned to an object, for later references.
175   */
176  int baseWireHandle = 0x7e0000;
177
178  /**
179   * Flag used in <code>ObjectStreamClass</code> to designate that the class
180   * defines the <code>writeObject</code> method.
181   */
182  byte SC_WRITE_METHOD = 0x01;
183  
184  /**
185   * Flag used in <code>ObjectStreamClass</code> to designate that the class
186   * is serializeable.
187   */
188  byte SC_SERIALIZABLE = 0x02;
189  
190  /**
191   * Flag used in <code>ObjectStreamClass</code> to designate that the class
192   * is externalizable.
193   */
194  byte SC_EXTERNALIZABLE = 0x04;
195  
196  /**
197   * Flag used in <code>ObjectStreamClass</code> to designate that
198   * externalizable data is written in block data mode.
199   * 
200   * @since 1.2
201   */
202  byte SC_BLOCK_DATA = 0x08;
203
204  /**
205   * Flag used in <code>ObjectStreamClass</code> to designate that the class
206   * is an enum constant.
207   * 
208   * @since 1.5
209   */
210  byte SC_ENUM = 0x10;
211  
212  /**
213   * Constant for use with a <code>SecurityManager</code> to check if
214   * substitution of objects is allowed.
215   */
216  SerializablePermission SUBSTITUTION_PERMISSION
217    = new SerializablePermission("enableSubstitution");
218
219  /**
220   * Constant for use with a <code>SecurityManager</code> to check if
221   * overriding of the <code>writeObject</code> and <code>readObject</code>
222   * methods is allowed.
223   */
224  SerializablePermission SUBCLASS_IMPLEMENTATION_PERMISSION
225    = new SerializablePermission("enableSubclassImplementation");
226}
227