关于JAVA的IO,之前是一点都不能理解,老师们很清楚地用生活中的例子来描述,我却似懂非懂,放到代码中却更难以理解。刚开始接触C的时候,只知道输入和输出,在大二刚开学做的C++项目----T恤自动售货机,老师说要现实储存数据 和提取数据的功能,当时我还单纯的以为是把数据保存在数组上,然后可以打印出来。
数据的存储,不单是指保存在数组上,也可以是以文件的形式保存在硬盘中。简单地说,储存在数组里的变量是保存在内存上的,断电后就会丢失,而后者则是永久地储存在硬盘中的。
数据的提取,可以是打印储存在数组里的变量,也可以是打印出硬盘里的文件内容。
IO,input,output,输入输出。流这一概念,像水管一样,可以流入流出,他建立在内存中,所以不放把它当作内存来看。输入流,也就是往内存中输入信息,输出流,就是把内存中的数据信息提取出来。而打印,只是显示流中的信息。
光说可能不容易理解,举个实例(复制粘贴):
public void copyPaste(String srcName,String destName){
try{
//创建文件输入流对象 形参代表的是将要输入到流中的数据文件,以路径的形式表示最好,分别创建一个输入流和输出流对象,在内存中占据一个空间
FileInputStream in = new FileInputStream(srcName); //就像定义一个数组一样,只不过没有长度限制
//创建文件输出流对象 形参代表的是输出流输出的目的文件也是最好以路径的形式表示
FileOutputStream out = new FileOutputStream(destName);
//获取字节总数
int length = in.available();
//把字节总数分为几段
int m = length/(10*1024*1024);
//取余
int n = length%(10*1024*1024);
//创建一个字节数组
byte datas [] = new byte[10*1024*1024];
//一段一段复制
for(int o = 0;o<m;o++){
//读入 //在这对流写入 数据(上面输入的路径的文件)
in.read(datas);
//写出 //在这把流中的数据输出保存到目的文件中
out.write(datas); //也可以打印在屏幕上,但这并不会实现永久的保存,断电后数据就会消失
}
//创建一个字节数组 用来读入和写出剩余的字节
byte datas_2 [] = new byte[n];
in.read(datas_2);
out.write(datas_2);
System.out.println("文件复制粘贴完成!!!");
//关闭流 //举例说流可以类比成一个数组,肯定也是占据了内存的,所以不用了请关闭
out.close();
in.close();
}catch(Exception e){
e.printStackTrace();
}
}
上面的代码和算法可能会看不懂,主要想用写了备注的代码来举例今天我说得内容,想要形象地解释流这一概念。内容可能很白痴,我当初出现了这样的问题,也有人会有这样的疑问,在此记录的同时,希望对大家有所帮助!
Techck