2 * 11/19/04 1.0 moved to LGPL.
\r
3 * 12/12/99 Initial version. mdm@techie.com
\r
4 *-----------------------------------------------------------------------
\r
5 * This program is free software; you can redistribute it and/or modify
\r
6 * it under the terms of the GNU Library General Public License as published
\r
7 * by the Free Software Foundation; either version 2 of the License, or
\r
8 * (at your option) any later version.
\r
10 * This program is distributed in the hope that it will be useful,
\r
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
\r
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
\r
13 * GNU Library General Public License for more details.
\r
15 * You should have received a copy of the GNU Library General Public
\r
16 * License along with this program; if not, write to the Free Software
\r
17 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
\r
18 *----------------------------------------------------------------------
\r
21 package javazoom.jl.decoder;
\r
23 import java.io.IOException;
\r
24 import java.io.InputStream;
\r
25 import java.io.InvalidClassException;
\r
26 import java.io.InvalidObjectException;
\r
27 import java.io.ObjectInputStream;
\r
28 import java.io.ObjectOutputStream;
\r
29 import java.io.OutputStream;
\r
30 import java.lang.reflect.Array;
\r
33 * The JavaLayerUtils class is not strictly part of the JavaLayer API.
\r
34 * It serves to provide useful methods and system-wide hooks.
\r
38 public class JavaLayerUtils
\r
40 static private JavaLayerHook hook = null;
\r
43 * Deserializes the object contained in the given input stream.
\r
44 * @param in The input stream to deserialize an object from.
\r
45 * @param cls The expected class of the deserialized object.
\r
47 static public Object deserialize(InputStream in, Class cls)
\r
51 throw new NullPointerException("cls");
\r
53 Object obj = deserialize(in, cls);
\r
54 if (!cls.isInstance(obj))
\r
56 throw new InvalidObjectException("type of deserialized instance not of required class.");
\r
63 * Deserializes an object from the given <code>InputStream</code>.
\r
64 * The deserialization is delegated to an <code>
\r
65 * ObjectInputStream</code> instance.
\r
67 * @param in The <code>InputStream</code> to deserialize an object
\r
70 * @return The object deserialized from the stream.
\r
71 * @exception IOException is thrown if there was a problem reading
\r
72 * the underlying stream, or an object could not be deserialized
\r
75 * @see java.io.ObjectInputStream
\r
77 static public Object deserialize(InputStream in)
\r
81 throw new NullPointerException("in");
\r
83 ObjectInputStream objIn = new ObjectInputStream(in);
\r
89 obj = objIn.readObject();
\r
91 catch (ClassNotFoundException ex)
\r
93 throw new InvalidClassException(ex.toString());
\r
100 * Deserializes an array from a given <code>InputStream</code>.
\r
102 * @param in The <code>InputStream</code> to
\r
103 * deserialize an object from.
\r
105 * @param elemType The class denoting the type of the array
\r
107 * @param length The expected length of the array, or -1 if
\r
108 * any length is expected.
\r
110 static public Object deserializeArray(InputStream in, Class elemType, int length)
\r
113 if (elemType==null)
\r
114 throw new NullPointerException("elemType");
\r
117 throw new IllegalArgumentException("length");
\r
119 Object obj = deserialize(in);
\r
121 Class cls = obj.getClass();
\r
124 if (!cls.isArray())
\r
125 throw new InvalidObjectException("object is not an array");
\r
127 Class arrayElemType = cls.getComponentType();
\r
128 if (arrayElemType!=elemType)
\r
129 throw new InvalidObjectException("unexpected array component type");
\r
133 int arrayLength = Array.getLength(obj);
\r
134 if (arrayLength!=length)
\r
135 throw new InvalidObjectException("array length mismatch");
\r
141 static public Object deserializeArrayResource(String name, Class elemType, int length)
\r
144 InputStream str = getResourceAsStream(name);
\r
146 throw new IOException("unable to load resource '"+name+"'");
\r
148 Object obj = deserializeArray(str, elemType, length);
\r
153 static public void serialize(OutputStream out, Object obj)
\r
157 throw new NullPointerException("out");
\r
160 throw new NullPointerException("obj");
\r
162 ObjectOutputStream objOut = new ObjectOutputStream(out);
\r
163 objOut.writeObject(obj);
\r
168 * Sets the system-wide JavaLayer hook.
\r
170 static synchronized public void setHook(JavaLayerHook hook0)
\r
175 static synchronized public JavaLayerHook getHook()
\r
181 * Retrieves an InputStream for a named resource.
\r
183 * @param name The name of the resource. This must be a simple
\r
184 * name, and not a qualified package name.
\r
186 * @return The InputStream for the named resource, or null if
\r
187 * the resource has not been found. If a hook has been
\r
188 * provided, its getResourceAsStream() method is called
\r
189 * to retrieve the resource.
\r
191 static synchronized public InputStream getResourceAsStream(String name)
\r
193 InputStream is = null;
\r
197 is = hook.getResourceAsStream(name);
\r
201 Class cls = JavaLayerUtils.class;
\r
202 is = cls.getResourceAsStream(name);
\r