private static FbxElement readFBXElement(ByteBuffer byteBuffer, FbxFile file)
            throws IOException {
        long endOffset = getUInt(byteBuffer);
        if (file.hasExtendedOffsets()) {
            long upper = getUInt(byteBuffer);
            if (upper != 0L) {
                throw new IOException(
                        "Non-zero upper bytes: 0x" + Long.toHexString(upper));
            }
        }
        if(endOffset == 0)
            return null;

        long propCount = getUInt(byteBuffer);
        if (file.hasExtendedOffsets()) {
            long upper = getUInt(byteBuffer);
            if (upper != 0L) {
                throw new IOException(
                        "Non-zero upper bytes: 0x" + Long.toHexString(upper));
            }
        }

        getUInt(byteBuffer); // Properties length unused
        if (file.hasExtendedOffsets()) {
            long upper = getUInt(byteBuffer);
            if (upper != 0L) {
                throw new IOException(
                        "Non-zero upper bytes: 0x" + Long.toHexString(upper));
            }
        }

        FbxElement element = new FbxElement((int) propCount);
        element.id = new String(getBytes(byteBuffer, getUByte(byteBuffer)));
        
        for(int i = 0; i < propCount; ++i) {
            char dataType = readDataType(byteBuffer);
            element.properties.add(readData(byteBuffer, dataType));
            element.propertiesTypes[i] = dataType;
        }
        if(byteBuffer.position() < endOffset) {
            int blockSentinelLength = file.numSentinelBytes();
            while (byteBuffer.position() < (endOffset - blockSentinelLength)) {
                FbxElement child = readFBXElement(byteBuffer, file);
                if (child != null) {
                    element.children.add(child);
                }
            }

            if (!allZero(getBytes(byteBuffer, blockSentinelLength))) {
                throw new IOException("Block sentinel is corrupt: expected all zeros.");
            }
        }
        if(byteBuffer.position() != endOffset)
            throw new IOException("Data length not equal to expected");
        return element;
    }
A private constructor to inhibit instantiation of this class.
jme3-plugins/src/fbx/java/com/jme3/scene/plugins/fbx/file/FbxReader.java