Switched to doing serialization by hand because I got tired of Java's

fucking serialization crapping out when the class was recompiled and its
panties got into a bunch.


git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@1216 542714f4-19e9-0310-aa3c-eee0fc999fb1
This commit is contained in:
Michael Bayne
2002-04-07 23:15:29 +00:00
parent e3bd4dfcfd
commit 03a68efe7c
@@ -1,18 +1,22 @@
// //
// $Id: ComponentBundlerTask.java,v 1.6 2002/04/01 16:49:26 mdb Exp $ // $Id: ComponentBundlerTask.java,v 1.7 2002/04/07 23:15:29 mdb Exp $
package com.threerings.cast.bundle.tools; package com.threerings.cast.bundle.tools;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.File; import java.io.File;
import java.io.FileInputStream; import java.io.FileInputStream;
import java.io.FileNotFoundException; import java.io.FileNotFoundException;
import java.io.FileOutputStream; import java.io.FileOutputStream;
import java.io.IOException; import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream; import java.io.ObjectOutputStream;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashMap; import java.util.HashMap;
import java.util.Iterator;
import java.util.jar.JarOutputStream; import java.util.jar.JarOutputStream;
import java.util.jar.JarEntry; import java.util.jar.JarEntry;
@@ -225,16 +229,16 @@ public class ComponentBundlerTask extends Task
protected HashMapIDBroker loadBroker (File mapfile) protected HashMapIDBroker loadBroker (File mapfile)
throws BuildException throws BuildException
{ {
HashMapIDBroker broker; HashMapIDBroker broker = new HashMapIDBroker();
try { try {
FileInputStream fin = new FileInputStream(mapfile); FileInputStream fin = new FileInputStream(mapfile);
ObjectInputStream oin = new ObjectInputStream(fin); DataInputStream din =
broker = (HashMapIDBroker)oin.readObject(); new DataInputStream(new BufferedInputStream(fin));
broker.readFrom(din);
} catch (FileNotFoundException fnfe) { } catch (FileNotFoundException fnfe) {
// if the file doesn't yet exist, start with a blank broker // if the file doesn't yet exist, start with a blank broker
broker = new HashMapIDBroker();
} catch (Exception e) { } catch (Exception e) {
throw new BuildException("Error loading component ID map " + throw new BuildException("Error loading component ID map " +
@@ -253,9 +257,10 @@ public class ComponentBundlerTask extends Task
{ {
try { try {
FileOutputStream fout = new FileOutputStream(mapfile); FileOutputStream fout = new FileOutputStream(mapfile);
ObjectOutputStream oout = new ObjectOutputStream(fout); DataOutputStream dout =
oout.writeObject(broker); new DataOutputStream(new BufferedOutputStream(fout));
oout.close(); ((HashMapIDBroker)broker).writeTo(dout);
dout.close();
} catch (IOException ioe) { } catch (IOException ioe) {
throw new BuildException("Unable to store component ID map " + throw new BuildException("Unable to store component ID map " +
"[mapfile=" + mapfile + "]", ioe); "[mapfile=" + mapfile + "]", ioe);
@@ -283,6 +288,40 @@ public class ComponentBundlerTask extends Task
// nothing doing // nothing doing
} }
public void writeTo (DataOutputStream dout)
throws IOException
{
// write out the size of the table
dout.writeInt(size());
// write out the keys and values
Iterator keys = keySet().iterator();
while (keys.hasNext()) {
Tuple key = (Tuple)keys.next();
Integer value = (Integer)get(key);
dout.writeUTF((String)key.left);
dout.writeUTF((String)key.right);
dout.writeInt(value.intValue());
}
// write out our most recently assigned component id
dout.writeInt(_nextCID);
}
public void readFrom (DataInputStream din)
throws IOException
{
// figure out how many keys and values we'll be reading
int size = din.readInt();
// and read them on in
for (int i = 0; i < size; i++) {
String cclass = din.readUTF();
String cname = din.readUTF();
int value = din.readInt();
put(new Tuple(cclass, cname), new Integer(value));
}
// read in our most recently assigned component id
_nextCID = din.readInt();
}
protected int _nextCID = 0; protected int _nextCID = 0;
} }