public INode getINode(int iNodeNr) throws IOException, FileSystemException { if (iNodeNr < 1) throw new IOException("INode number must be greater than 0");  int group = (int) ((iNodeNr - 1) / superblock.getINodesPerGroup()); int index = (int) ((iNodeNr - 1) % superblock.getINodesPerGroup());   long iNodeTableBlock = groupDescriptors[group].getInodeTable(); INodeTable iNodeTable = new INodeTable(this, (int) iNodeTableBlock); return new INode(this, iNodeTable.getInodeData(index));
public INode getINode(int iNodeNr) throws IOException, FileSystemException{ if((iNodeNr<1)||(iNodeNr>superblock.getINodesCount())) throw new FileSystemException("INode number ("+iNodeNr+") out of range (0-"+superblock.getINodesCount()+")");  Integer key=new Integer((int)iNodeNr);    synchronized(inodeCache) {  if(inodeCache.containsKey(key)) return (INode)inodeCache.get(key); else{ int group = (int) ((iNodeNr - 1) / superblock.getINodesPerGroup()); int index = (int) ((iNodeNr - 1) % superblock.getINodesPerGroup());   long iNodeTableBlock  = groupDescriptors[group].getInodeTable(); INodeTable iNodeTable = new INodeTable(this, (int)iNodeTableBlock); INode result = new INode(this, new INodeDescriptor(iNodeTable, iNodeNr, group, index), iNodeTable.getInodeData(index));  inodeCache.put(key, result);  return result; } }
	public INode getINode(int iNodeNr) throws IOException, FileSystemException {		if (iNodeNr < 1)			throw new IOException("INode number must be greater than 0");		int group = (int) ((iNodeNr - 1) / superblock.getINodesPerGroup());		int index = (int) ((iNodeNr - 1) % superblock.getINodesPerGroup());		//get the part of the inode table that contains the inode		long iNodeTableBlock = groupDescriptors[group].getInodeTable(); //the first block of the inode table		INodeTable iNodeTable = new INodeTable(this, (int) iNodeTableBlock);		return new INode(this, iNodeTable.getInodeData(index));	}