// throws IOException private void loadMetadata(DataReader inr) { inr.order = versionInfo.order(); // read structure data typeTreeBlock.markBegin(inr.position); typeTreeStruct.read(inr); typeTreeBlock.markEnd(inr.position); //Logger.Log("typeTreeBlock: {0}" + typeTreeBlock); objectInfoBlock.markBegin(inr.position); objectInfoStruct.read(inr); objectInfoBlock.markEnd(inr.position); //Logger.Log("objectInfoBlock: {0}" + objectInfoBlock); // unknown block for Unity 5 if (header.getversion() > 13) { inr.align(4); int num = inr.readInt(); if (num != 0 && header.getversion() >= 15) { // sorry, no info on that block => cant read externals. num -> num-9 worked for my experimental file, but I dont know about others Logger.Log("num=" + num); return; } for (int i = 0; i < num; i++) { inr.readInt(); inr.readInt(); inr.readInt(); } } externalsBlock.markBegin(inr.position); externalsStruct.read(inr); externalsBlock.markEnd(inr.position); //Logger.Log("externalsBlock: {0}" + externalsBlock); byte[] userInformation = new byte[header.dataOffset - inr.position]; inr.readBytes(ref userInformation); }
// throws IOException public void deserialize(DataReader inr, ObjectData data) { versionInfo = data.versionInfo; //MemoryStream ms = new MemoryStream(data.buffer.data); //DataReader inr = new DataReader(ms); ////DataReader inr = DataReaders.forByteBuffer(data.buffer); //inr.order = versionInfo.order(); //inr.SetPosition( 0; //FieldNode instance = readObject(inr, data.typeTree); ByteOrder oldorder = inr.order; inr.order = versionInfo.order(); FieldNode instance = readObject(inr, data.typeTree); inr.order = oldorder; data.instance = instance; }