inodetable.java

来自「纯java操作系统jnode,安装简单和操作简单的个人使用的Java操作系统」· Java 代码 · 共 55 行

JAVA
55
字号
/*
 * $Id: INodeTable.java,v 1.4 2003/12/28 22:09:18 gbin Exp $
 */
package org.jnode.fs.ext2;

import java.io.IOException;

import org.jnode.fs.FileSystemException;

/**
 * @author Andras Nagy
 */
public class INodeTable {
	private final int blockSize;
	int blockCount;
	Ext2FileSystem fs;
	int firstBlock;
	
	public INodeTable(Ext2FileSystem fs, int firstBlock) {
		this.fs = fs;
		this.firstBlock = firstBlock;
		blockSize=fs.getSuperblock().getBlockSize();
		blockCount = (int)Math.ceil(
			(double)(fs.getSuperblock().getINodesCount()*INode.INODE_LENGTH) / 
			(double) blockSize);
	}
	
	public byte[] getINodeTableBlock(int blockNo) throws FileSystemException, IOException{
		if(blockNo < blockCount) 
			return fs.getBlock(firstBlock+blockNo);
		else throw new FileSystemException("Trying to get block #"+blockNo+
			"of an inode table that only has "+blockCount+" blocks");
	}
	
	/** 
	 * Get the indexth inode from the inode table.
	 * (index is not an inode number, it is just an index in the inode table)
	 */
	public byte[] getInodeData(int index) throws IOException, FileSystemException{
		byte data[] = new byte[INode.INODE_LENGTH];
		
		int indexCopied = 0;
		while(indexCopied<INode.INODE_LENGTH) {
			int blockNo 	= (index*INode.INODE_LENGTH+indexCopied) / blockSize;
			int blockOffset = (index*INode.INODE_LENGTH+indexCopied) % blockSize;
			int copyLength 	= Math.min(blockSize-blockOffset, INode.INODE_LENGTH);
			System.arraycopy(	getINodeTableBlock(blockNo), blockOffset, 
								data, indexCopied, 
								copyLength);
			indexCopied+=copyLength;
		}
		return data;
	}
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?