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 + -
显示快捷键?