java io 流问题

在Java中 IO 流有 对字节的操作 inputstream 和 outputstream 其中 inputstream 是从java 从磁盘向内存中读取数据,OutputStream是从内存往磁盘中写数据。

 有对字符的操作 字符流输入输出流 reader 和 writer;

其中字节流 与字符流的区别是  :

 1、字符流的读写是以字符为基本单位的,一个字符可能有多个字节,字节流是以一个字节为基本单位进行传输的,

字节流适宜用来传输视屏、音频文件,字符流适合用来传输 文本文件;

2、处理的对象不同,字节流可以传输所有类型的数据,字符流只能传输字符类型的数据;

3、字符流有缓冲区,字节没有缓冲,缓冲可以在内存中有一部分数据之后存进磁盘,能提高效率。

下面是一个Java中字符流的继承关系图,可以帮助理解IO流

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();
    }
}