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:
@@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user