📄 raid0.java
字号:
/******************************
* Raid0
*
*
******************************/
import java.io.IOException;
import java.io.RandomAccessFile;
class Raid0 implements Raid {
String inFileName;
String outFileName;
RandomAccessFile in;
RandomAccessFile out[];
int n;
int begin=0;
int length;
int CAPACITY;
public int[] capRemain;
int [] waste;
byte[] cbuf;
int ReadAble;
public boolean Readable()
{
return(ReadAble!=-1);
}
public boolean Storeable()
{
boolean a=true;
for(int i=0;i<n;i++)
{
if(capRemain[i]<length)
{
a=false;
System.out.println ("磁盘"+i+"空间不足,整条将不再写入");
}
}
return a;
}
public int Capcity()
{
return CAPACITY;
}
public void capcity_Remained(int[]a)
{
for(int i=0;i<n;i++)
{
a[i]=capRemain[i];
}
}
public int Cap_available()
{
int a=0;
for(int i=0;i<n;i++)
{
a+=capRemain[i]-waste[i];
}
return a;
}
public void ReadBlock() throws IOException
{
ReadAble=in.read(cbuf,0,n*length);
if(ReadAble==-1){System.out.println("文件结束或不足一条,读入终止");}
//这一行以后转为throw exception
}
public void StoreBlock()throws IOException{
int id = 0;
int buf_begin=0;
for(int i=0;i<n;i++)
{
if(capRemain[id]<length)
{
System.out.println("磁盘"+id+"容量"+capRemain[id]+"不足"+length+",写入失败");
break;
}
out[id].write(cbuf, buf_begin, length);
System.out.println("磁盘"+id+"写入数据");
capRemain[id]-=length;
System.out.println("磁盘"+id+"剩余容量为"+capRemain[id]);
buf_begin += length;
id = (id + 1) % n;
}
}
public void Recover(int downID)throws IOException
{
System.out.println("开什么玩笑,Raid0 down掉了还想恢复啊");
}
public Raid0(String inf,String outf,int n,int l,int[]cap) throws IOException
{
Cal c=new Cal();
int min=c.Min(cap, n);
cbuf=new byte[n*l];
inFileName=inf;
outFileName=outf;
this.n=n;
capRemain=new int[n];
for(int i=0;i<n;i++)
{
capRemain[i]=cap[i];
System.out.println("磁盘"+i+"剩余实际容量为"+capRemain[i]);
}
length=l;
in= new RandomAccessFile(inf,"r");
out = new RandomAccessFile[n];
for(int i=0;i<n;i++)
out[i] = new RandomAccessFile ("" + i + "_" +outFileName,"rw");
CAPACITY=min/length*length*n;
waste=new int[n];
for(int i=0;i<n;i++)
{
waste[i]=cap[i]-min/length*length;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -