Search in sources :

Example 1 with DataBlock

use of info.ata4.util.io.DataBlock in project disunity by ata4.

the class SerializedFileReader method readMetadata.

private void readMetadata(DataReader in) throws IOException {
    SerializedFileMetadata metadata = serialized.metadata();
    SerializedFileHeader header = serialized.header();
    DataBlock metadataBlock = serialized.metadataBlock();
    metadataBlock.markBegin(in);
    metadata.version(header.version());
    in.readStruct(metadata);
    metadataBlock.markEnd(in);
    L.log(Level.FINER, "metadataBlock: {0}", metadataBlock);
}
Also used : DataBlock(info.ata4.util.io.DataBlock)

Example 2 with DataBlock

use of info.ata4.util.io.DataBlock in project disunity by ata4.

the class SerializedFileReader method readObjects.

private void readObjects(DataReader in) throws IOException {
    long ofsMin = Long.MAX_VALUE;
    long ofsMax = Long.MIN_VALUE;
    SerializedFileHeader header = serialized.header();
    SerializedFileMetadata metadata = serialized.metadata();
    Map<Long, ObjectInfo> objectInfoMap = metadata.objectInfoTable().infoMap();
    Map<Integer, TypeRoot<Type>> typeTreeMap = metadata.typeTree().typeMap();
    List<SerializedObjectData> objectData = serialized.objectData();
    for (Map.Entry<Long, ObjectInfo> infoEntry : objectInfoMap.entrySet()) {
        ObjectInfo info = infoEntry.getValue();
        long id = infoEntry.getKey();
        long ofs = header.dataOffset() + info.offset();
        ofsMin = Math.min(ofsMin, ofs);
        ofsMax = Math.max(ofsMax, ofs + info.length());
        SerializedObjectData object = new SerializedObjectData(id);
        object.info(info);
        // create and read object data buffer
        ByteBuffer buf = ByteBufferUtils.allocate((int) info.length());
        in.position(ofs);
        in.readBuffer(buf);
        object.buffer(buf);
        // get type tree if possible
        TypeRoot typeRoot = typeTreeMap.get(info.typeID());
        if (typeRoot != null) {
            object.typeTree(typeRoot.nodes());
        }
        objectData.add(object);
    }
    DataBlock objectDataBlock = serialized.objectDataBlock();
    objectDataBlock.offset(ofsMin);
    objectDataBlock.endOffset(ofsMax);
    L.log(Level.FINER, "objectDataBlock: {0}", objectDataBlock);
}
Also used : ByteBuffer(java.nio.ByteBuffer) ObjectInfo(info.ata4.junity.serialize.objectinfo.ObjectInfo) DataBlock(info.ata4.util.io.DataBlock) TypeRoot(info.ata4.junity.serialize.typetree.TypeRoot) Map(java.util.Map)

Example 3 with DataBlock

use of info.ata4.util.io.DataBlock in project disunity by ata4.

the class SerializedFileReader method readHeader.

private void readHeader(DataReader in) throws IOException {
    DataBlock headerBlock = serialized.headerBlock();
    headerBlock.markBegin(in);
    in.readStruct(serialized.header());
    headerBlock.markEnd(in);
    L.log(Level.FINER, "headerBlock: {0}", headerBlock);
}
Also used : DataBlock(info.ata4.util.io.DataBlock)

Example 4 with DataBlock

use of info.ata4.util.io.DataBlock in project disunity by ata4.

the class SerializedFileWriter method writeMetadata.

private void writeMetadata(DataWriter out) throws IOException {
    SerializedFileMetadata metadata = serialized.metadata();
    SerializedFileHeader header = serialized.header();
    DataBlock metadataBlock = serialized.metadataBlock();
    metadataBlock.markBegin(out);
    metadata.version(header.version());
    out.writeStruct(metadata);
    metadataBlock.markEnd(out);
    L.log(Level.FINER, "metadataBlock: {0}", metadataBlock);
}
Also used : DataBlock(info.ata4.util.io.DataBlock)

Example 5 with DataBlock

use of info.ata4.util.io.DataBlock in project disunity by ata4.

the class SerializedFileWriter method writeObjects.

private void writeObjects(DataWriter out) throws IOException {
    long ofsMin = Long.MAX_VALUE;
    long ofsMax = Long.MIN_VALUE;
    for (SerializedObjectData data : serialized.objectData()) {
        ByteBuffer bb = data.buffer();
        bb.rewind();
        out.align(8);
        ofsMin = Math.min(ofsMin, out.position());
        ofsMax = Math.max(ofsMax, out.position() + bb.remaining());
        ObjectInfo info = data.info();
        info.offset(out.position() - serialized.header().dataOffset());
        info.length(bb.remaining());
        out.writeBuffer(bb);
    }
    DataBlock objectDataBlock = serialized.objectDataBlock();
    objectDataBlock.offset(ofsMin);
    objectDataBlock.endOffset(ofsMax);
    L.log(Level.FINER, "objectDataBlock: {0}", objectDataBlock);
}
Also used : ByteBuffer(java.nio.ByteBuffer) ObjectInfo(info.ata4.junity.serialize.objectinfo.ObjectInfo) DataBlock(info.ata4.util.io.DataBlock)

Aggregations

DataBlock (info.ata4.util.io.DataBlock)9 ByteBuffer (java.nio.ByteBuffer)3 SerializedFile (info.ata4.junity.serialize.SerializedFile)2 ObjectInfo (info.ata4.junity.serialize.objectinfo.ObjectInfo)2 IOException (java.io.IOException)2 Path (java.nio.file.Path)2 Map (java.util.Map)2 Parameters (com.beust.jcommander.Parameters)1 Formatters (info.ata4.disunity.cli.util.Formatters)1 TableBuilder (info.ata4.disunity.cli.util.TableBuilder)1 TableModel (info.ata4.disunity.cli.util.TableModel)1 TextTableFormat (info.ata4.disunity.cli.util.TextTableFormat)1 DataWriters (info.ata4.io.DataWriters)1 SerializedFileHeader (info.ata4.junity.serialize.SerializedFileHeader)1 SerializedFileReader (info.ata4.junity.serialize.SerializedFileReader)1 SerializedFileWriter (info.ata4.junity.serialize.SerializedFileWriter)1 SerializedObjectData (info.ata4.junity.serialize.SerializedObjectData)1 Type (info.ata4.junity.serialize.typetree.Type)1 TypeRoot (info.ata4.junity.serialize.typetree.TypeRoot)1 ParameterizedUtils (info.ata4.test.ParameterizedUtils)1