java io 流问题
在Java中 IO 流有 对字节的操作 inputstream 和 outputstream 其中 inputstream 是从java 从磁盘向内存中读取数据,OutputStream是从内存往磁盘中写数据。
有对字符的操作 字符流输入输出流 reader 和 writer;
其中字节流 与字符流的区别是 :
1、字符流的读写是以字符为基本单位的,一个字符可能有多个字节,字节流是以一个字节为基本单位进行传输的,
字节流适宜用来传输视屏、音频文件,字符流适合用来传输 文本文件;
2、处理的对象不同,字节流可以传输所有类型的数据,字符流只能传输字符类型的数据;
3、字符流有缓冲区,字节没有缓冲,缓冲可以在内存中有一部分数据之后存进磁盘,能提高效率。
下面是一个Java中字符流的继承关系图,可以帮助理解IO流
已经现在用InputStream/OutputStream 做了一个小实验来熟悉一下 字节流:
package test;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
public class InputStreamTest{
// 调用主函数
public static void main(String[] args) throws Exception {
// 明确数据源
long startTime = System.currentTimeMillis();
File file = new File("D:/新绝代双骄3");
File file2 = new File("D:/bbb.txt");
copyDir("D:/新绝代双骄3","D:/ccc");
long endTime = System.currentTimeMillis();
System.out.println("执行时间"+(endTime-startTime)/1000);
}
/**
* 复制文件夹
*/
private static void copyDir(String source,String des){
File file = new File(source);
File[] files = file.listFiles();
File file2 = new File(des);
file2.mkdirs();
for (File f : files) {
if (f.isFile()) {
try {
filCopy(f.getPath(),des+"\\"+f.getName());
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}else if (f.isDirectory()) {
copyDir(f.getPath(), des+"\\"+f.getName());
}
}
}
private static void filCopy(String path, String string) throws IOException {
BufferedInputStream bis = new BufferedInputStream(new FileInputStream(path));
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(string));
int i = -1;
byte[] bt = new byte[2048];
while((i=bis.read(bt))!=-1){
bos.write(bt,0,i);
}
bis.close();
bos.close();
}
}