1 /*
2  *  Licensed to the Apache Software Foundation (ASF) under one or more
3  *  contributor license agreements.  See the NOTICE file distributed with
4  *  this work for additional information regarding copyright ownership.
5  *  The ASF licenses this file to You under the Apache License, Version 2.0
6  *  (the "License"); you may not use this file except in compliance with
7  *  the License.  You may obtain a copy of the License at
8  *
9  *     http://www.apache.org/licenses/LICENSE-2.0
10  *
11  *  Unless required by applicable law or agreed to in writing, software
12  *  distributed under the License is distributed on an "AS IS" BASIS,
13  *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  *  See the License for the specific language governing permissions and
15  *  limitations under the License.
16  */
17 
18 package java.io;
19 
20 /**
21  * A helper interface with constants used by the serialization implementation.
22  */
23 public abstract interface ObjectStreamConstants {
24 
25     /**
26      * The stream header's magic number.
27      */
28     public static final short STREAM_MAGIC = (short) 0xaced;
29 
30     /**
31      * The stream header's version number.
32      */
33     public static final short STREAM_VERSION = 5;
34 
35     // These are tags to indicate the stream contents
36 
37     /**
38      * The minimum tag value.
39      */
40     public static final byte TC_BASE = 0x70;
41 
42     /**
43      * Tag to mark a {@code null} object reference.
44      */
45     public static final byte TC_NULL = (byte) 0x70;
46 
47     /**
48      * Tag to mark a reference to an object that has already been written to the
49      * stream.
50      */
51     public static final byte TC_REFERENCE = (byte) 0x71;
52 
53     /**
54      * Tag to mark a new class descriptor.
55      */
56     public static final byte TC_CLASSDESC = (byte) 0x72;
57 
58     /**
59      * Tag to mark a new object.
60      */
61     public static final byte TC_OBJECT = (byte) 0x73;
62 
63     /**
64      * Tag to mark a new string.
65      */
66     public static final byte TC_STRING = (byte) 0x74;
67 
68     /**
69      * Tag to mark a new array.
70      */
71     public static final byte TC_ARRAY = (byte) 0x75;
72 
73     /**
74      * Tag to mark a reference to a class.
75      */
76     public static final byte TC_CLASS = (byte) 0x76;
77 
78     /**
79      * Tag to mark a block of optional data. The byte following this tag
80      * indicates the size of the block.
81      */
82     public static final byte TC_BLOCKDATA = (byte) 0x77;
83 
84     /**
85      * Tag to mark the end of block data blocks for an object.
86      */
87     public static final byte TC_ENDBLOCKDATA = (byte) 0x78;
88 
89     /**
90      * Tag to mark a stream reset.
91      */
92     public static final byte TC_RESET = (byte) 0x79;
93 
94     /**
95      * Tag to mark a long block of data. The long following this tag
96      * indicates the size of the block.
97      */
98     public static final byte TC_BLOCKDATALONG = (byte) 0x7A;
99 
100     /**
101      * Tag to mark an exception.
102      */
103     public static final byte TC_EXCEPTION = (byte) 0x7B;
104 
105     /**
106      * Tag to mark a long string.
107      */
108     public static final byte TC_LONGSTRING = (byte) 0x7C;
109 
110     /**
111      * Tag to mark a new proxy class descriptor.
112      */
113     public static final byte TC_PROXYCLASSDESC = (byte) 0x7D;
114 
115     /**
116      * The maximum tag value.
117      */
118     public static final byte TC_MAX = 0x7E;
119 
120     /**
121      * Handle for the first object that gets serialized.
122      */
123     public static final int baseWireHandle = 0x007e0000;
124 
125     /**
126      * Stream protocol version 1.
127      */
128     public static final int PROTOCOL_VERSION_1 = 1;
129 
130     /**
131      * Stream protocol version 2.
132      */
133     public static final int PROTOCOL_VERSION_2 = 2;
134 
135     /**
136      * Permission constant to enable subclassing of ObjectInputStream and
137      * ObjectOutputStream.
138      */
139     public static final SerializablePermission SUBCLASS_IMPLEMENTATION_PERMISSION = new SerializablePermission(
140             "enableSubclassImplementation");
141 
142     /**
143      * Permission constant to enable object substitution during serialization
144      * and deserialization.
145      */
146     public static final SerializablePermission SUBSTITUTION_PERMISSION = new SerializablePermission(
147             "enableSubstitution");
148 
149     // Flags that indicate if the object was serializable, externalizable
150     // and had a writeObject method when dumped.
151     /**
152      * Bit mask for the {@code flag} field in {@link ObjectStreamClass}. Indicates
153      * that a {@link Serializable} class has its own {@code writeObject} method.
154      */
155     public static final byte SC_WRITE_METHOD = 0x01; // If SC_SERIALIZABLE
156 
157     /**
158      * Bit mask for the {@code flag} field in {@link ObjectStreamClass}. Indicates
159      * that a class implements {@link Serializable} but not {@link Externalizable}.
160      */
161     public static final byte SC_SERIALIZABLE = 0x02;
162 
163     /**
164      * Bit mask for the {@code flag} field in {@link ObjectStreamClass}. Indicates
165      * that a class implements {@link Externalizable}.
166      */
167     public static final byte SC_EXTERNALIZABLE = 0x04;
168 
169     /**
170      * Bit mask for the {@code flag} field in {@link ObjectStreamClass}. Indicates
171      * that an externalizable class is written in block data mode.
172      */
173     public static final byte SC_BLOCK_DATA = 0x08; // If SC_EXTERNALIZABLE
174 
175     /**
176      * Tag to mark a new enum.
177      */
178     public static final byte TC_ENUM = 0x7E;
179 
180     /**
181      * Bit mask for the {@code flag} field in {@link ObjectStreamClass}. Indicates
182      * that a class is an enum type.
183      */
184     public static final byte SC_ENUM = 0x10;
185 }
186