* @param init
* True to indicate that the data set should be fully initialised
* @return A DetectorDataSet filled with data from the reader
*/
public static Dataset read(BinaryReader reader, boolean init) throws IOException {
Dataset dataSet = new Dataset(reader);
MemoryVariableList<AsciiString> strings = new MemoryVariableList<AsciiString>(
dataSet, reader, new AsciiStringFactory());
MemoryFixedList<Component> components = new MemoryFixedList<Component>(
dataSet, reader, new ComponentFactory());
MemoryFixedList<Map> maps = new MemoryFixedList<Map>(
dataSet, reader, new MapFactory());
MemoryFixedList<Property> properties = new MemoryFixedList<Property>(
dataSet, reader, new PropertyFactory());
MemoryFixedList<Value> values = new MemoryFixedList<Value>(dataSet,
reader, new ValueFactory());
MemoryVariableList<Profile> profiles = new MemoryVariableList<Profile>(
dataSet, reader, new ProfileFactory());
MemoryFixedList<Signature> signatures = new MemoryFixedList<Signature>(
dataSet, reader, new SignatureFactory(dataSet));
MemoryFixedList<RankedSignatureIndex> rankedSignatureIndexes =
new MemoryFixedList<RankedSignatureIndex>(
dataSet, reader, new RankedSignatureIndexFactory());
MemoryVariableList<Node> nodes = new MemoryVariableList<Node>(dataSet,
reader, new NodeFactory());
MemoryFixedList<Node> rootNodes = new MemoryFixedList<Node>(dataSet,
reader, new RootNodeFactory());
MemoryFixedList<ProfileOffset> profileOffsets = new MemoryFixedList<ProfileOffset>(
dataSet, reader, new ProfileOffsetFactory());
dataSet.strings = strings;
dataSet.components = components;
dataSet.maps = maps;
dataSet.properties = properties;
dataSet.values = values;
dataSet.profiles = profiles;
dataSet.signatures = signatures;
dataSet.rankedSignatureIndexes = rankedSignatureIndexes;
dataSet.nodes = nodes;
dataSet.rootNodes = rootNodes;
dataSet.profileOffsets = profileOffsets;
strings.read(reader);
components.read(reader);
maps.read(reader);
properties.read(reader);
values.read(reader);
profiles.read(reader);
signatures.read(reader);
rankedSignatureIndexes.read(reader);
nodes.read(reader);
rootNodes.read(reader);
profileOffsets.read(reader);
if (init) {
// Set references between objects.
dataSet.init();
// request garbage collection as a lot of memory has been freed.
System.gc();
}