data=getBlock(superblock.getFirstDataBlock()+1);
	public Ext2FileSystem(Device device, boolean readOnly)  throws FileSystemException {		super(device, readOnly);					byte data[];				blockCache = new BlockCache(50,(float)0.75);		inodeCache = new INodeCache(50,(float)0.75);				groupDescriptorLock = new Object();		superblockLock = new Object();		try {			data = new byte[Superblock.SUPERBLOCK_LENGTH];			//skip the first 1024 bytes (bootsector) and read the superblock 			//TODO: the superblock should read itself			getApi().read(1024, data, 0, Superblock.SUPERBLOCK_LENGTH);			superblock = new Superblock(data, this);						//read the group descriptors			groupCount = (int)Math.ceil((double)superblock.getBlocksCount() / (double)superblock.getBlocksPerGroup());			groupDescriptors = new GroupDescriptor[groupCount];						//OLD VERSION			for(int i=0; i<groupCount; i++) {			   data=getBlock(superblock.getFirstDataBlock()+1);    			   groupDescriptors[i] = new GroupDescriptor(data, this, i);			} 			//OLD VERSION			       			/*			for(int i=0; i<groupCount; i++) {				groupDescriptors[i]=new GroupDescriptor(i, this);			}			*/			} catch (FileSystemException e) {			throw e;		} catch (Exception e) {			throw new FileSystemException(e);		}						log.info(  "Ext2fs filesystem constructed sucessfully");		log.debug( "	superblock:	#blocks:		"+superblock.getBlocksCount()+"\n"+					"				#blocks/group:	"+superblock.getBlocksPerGroup()+"\n"+					"				#block groups:	"+groupCount+"\n"+					"				block size:		"+superblock.getBlockSize()+"\n"+					"				#inodes:		"+superblock.getINodesCount()+"\n"+					"				#inodes/group:	"+superblock.getINodesPerGroup());	}