com.jme.util.export.binary
Class BinaryExporter

java.lang.Object
  extended by com.jme.util.export.binary.BinaryExporter
All Implemented Interfaces:
JMEExporter

public class BinaryExporter
extends java.lang.Object
implements JMEExporter

Exports to the jME Binary Format. Format descriptor: (each numbered item denotes a series of bytes that follows sequentially one after the next.)

1. "number of classes" - four bytes - int value representing the number of entries in the class lookup table.

CLASS TABLE: There will be X blocks each consisting of numbers 2 thru 9, where X = the number read in 1.

2. "class alias" - 1...X bytes, where X = ((int) FastMath.log(aliasCount, 256) + 1) - an alias used when writing object data to match an object to its appropriate object class type.

3. "full class name size" - four bytes - int value representing number of bytes to read in for next field.

4. "full class name" - 1...X bytes representing a String value, where X = the number read in 3. The String is the fully qualified class name of the Savable class, eg "com.jme.math.Vector3f"

5. "number of fields" - four bytes - int value representing number of blocks to read in next (numbers 6 - 9), where each block represents a field in this class.

6. "field alias" - 1 byte - the alias used when writing out fields in a class. Because it is a single byte, a single class can not save out more than a total of 256 fields.

7. "field type" - 1 byte - a value representing the type of data a field contains. This value is taken from the static fields of com.jme.util.export.binary.BinaryClassField.

8. "field name size" - 4 bytes - int value representing the size of the next field.

9. "field name" - 1...X bytes representing a String value, where X = the number read in 8. The String is the full String value used when writing the current field.

10. "number of unique objects" - four bytes - int value representing the number of data entries in this file.

DATA LOOKUP TABLE: There will be X blocks each consisting of numbers 11 and 12, where X = the number read in 10.

11. "data id" - four bytes - int value identifying a single unique object that was saved in this data file.

12. "data location" - four bytes - int value representing the offset in the object data portion of this file where the object identified in 11 is located.

13. "future use" - four bytes - hardcoded int value 1.

14. "root id" - four bytes - int value identifying the top level object.

OBJECT DATA SECTION: There will be X blocks each consisting of numbers 15 thru 19, where X = the number of unique location values named in 12.

15. "class alias" - see 2.

16. "data length" - four bytes - int value representing the length in bytes of data stored in fields 17 and 18 for this object.

FIELD ENTRY: There will be X blocks each consisting of numbers 18 and 19

17. "field alias" - see 6.

18. "field data" - 1...X bytes representing the field data. The data length is dependent on the field type and contents.

Author:
Joshua Slack

Field Summary
protected  int aliasCount
           
static int COMPRESSION
           
protected  java.util.IdentityHashMap<Savable,BinaryIdContentPair> contentTable
           
static boolean debug
           
protected  int idCount
           
protected  java.util.HashMap<java.lang.Integer,java.lang.Integer> locationTable
           
 
Constructor Summary
BinaryExporter()
           
 
Method Summary
protected  int findPrevMatch(BinaryIdContentPair oldPair, java.util.ArrayList<BinaryIdContentPair> bucket)
           
protected  byte[] fixClassAlias(byte[] bytes, int width)
           
protected  BinaryIdContentPair generateIdContentPair(BinaryClassObject bco)
           
protected  byte[] generateTag()
           
 BinaryOutputCapsule getCapsule(Savable object)
           
protected  java.lang.String getChunk(BinaryIdContentPair pair)
           
static BinaryExporter getInstance()
           
 int processBinarySavable(Savable object)
           
 boolean save(Savable object, java.io.File f)
           
 boolean save(Savable object, java.io.OutputStream os)
           
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

COMPRESSION

public static int COMPRESSION

aliasCount

protected int aliasCount

idCount

protected int idCount

contentTable

protected java.util.IdentityHashMap<Savable,BinaryIdContentPair> contentTable

locationTable

protected java.util.HashMap<java.lang.Integer,java.lang.Integer> locationTable

debug

public static boolean debug
Constructor Detail

BinaryExporter

public BinaryExporter()
Method Detail

getInstance

public static BinaryExporter getInstance()

save

public boolean save(Savable object,
                    java.io.OutputStream os)
             throws java.io.IOException
Specified by:
save in interface JMEExporter
Throws:
java.io.IOException

getChunk

protected java.lang.String getChunk(BinaryIdContentPair pair)

findPrevMatch

protected int findPrevMatch(BinaryIdContentPair oldPair,
                            java.util.ArrayList<BinaryIdContentPair> bucket)

fixClassAlias

protected byte[] fixClassAlias(byte[] bytes,
                               int width)

save

public boolean save(Savable object,
                    java.io.File f)
             throws java.io.IOException
Specified by:
save in interface JMEExporter
Throws:
java.io.IOException

getCapsule

public BinaryOutputCapsule getCapsule(Savable object)
Specified by:
getCapsule in interface JMEExporter

processBinarySavable

public int processBinarySavable(Savable object)
                         throws java.io.IOException
Throws:
java.io.IOException

generateTag

protected byte[] generateTag()

generateIdContentPair

protected BinaryIdContentPair generateIdContentPair(BinaryClassObject bco)