io输入输出流用法

io基本概念

  • IO可以简单的理解成输入输出的意思。输入就是读,输出就是写。
  • IO可以读写硬盘、光盘、内存、键盘、网络等资源上的数据。
  • 1)程序需要数据:把数据流入到程序中—>输入.
    2)程序需要保存数据,把数据传递给别人—>输出.

 流

  • IO中的流就相当于现实生活中的水流一样,一打开自来水的龙头开关,水就从一头流向另一头。可以理解成每个按顺序排列的水滴就是需要传输的字节。把有序数据理解成流,流负责传输数据,以便于输入输出。数据是流动的,是有方向的流动。

流的分类 

  1. 按数据的走向可以分为:输入流,输出流。
  2. 按数据的单位可以分为:字节流、字符流。
  3. :根据功能的划分:节点流和包装流.

输入流与输出流

  1. 输入流:只能从中读取数据,而不能向其写入数据。一般用于将数据从网络、硬盘读取到内存中。
  2. 输出流:只能向其写入数据,而不能从中读取数据。一般用于将数据从内存中写入到网络、硬盘。
  • 输入流主要由InputStream作为父类。InputStream:所有字节输入流的超类,向程序输入使用FileInputStream;
  • 输出流主要由OutputStream作为父类。OutputStream:此为抽象类,所有输出字节流的超类,向文件中输出使用FileOutputStream类;
  • 他们都是抽象的,因此无法直接创建对象。

字节流与字符流

  • 字节流与字符流的用法几乎完全一样,区别在于所操作的单位不同,字节流操作8位的字节,
  • 而字符流操作16位的字符。

字节流主要由InputStream和OutputStream作为父类。

字符流主要由Reader和Writer作为父类。

输入输出:

字节输入输出流:每次只操作一个字节(读取或写入),字节操作流,默认每次执行写入操作会直接把数据写入文件.

输出:

public class OutPutText02 {
    public static void main(String[] args) throws IOException {
        File f1=new File("d:/aa");
        File f2=new File(f1,"a.txt");
        f1.mkdirs();
        f2.createNewFile();

        //使用OutputStream输出流完成对文件的写入操作
        OutputStream outputStream=new FileOutputStream(f2);//定义一个输出流。输出到f2文件中
        //outputStream.write(97);//按照ASCII解析数字  写入文件中
        byte[] bytes={97,98,99,100,101,102,103,104,105};
        //outputStream.write(bytes);//按照ASCII解析数组  写入文件  写入的:abcdefg
        outputStream.write(bytes,2,3);//从数组  指定索引的位置2  写入3个元素
    }
}

输入:

 

 public static void main(String[] args) throws IOException {
        //输出流:把内容的内存输出到文件中(写操作)  输入流:把文件内容输入到内存中(读操作)
        File f1 = new File("d:/a.txt");

        //定义输入流来读取文件内容
        InputStream inputStream = new FileInputStream(f1);
        //使用缓冲区进行数据读取
//        byte[] bytes=new byte[10];
//        一次最多读取数组长度个字节,读取的内容转换对应的数字存入byte数组中,返回的是实际读取的字节符
//        int n=inputStream.read(bytes);
//        System.out.println("读取的字节数:"+n);
//        String s=new String(bytes);
//        System.out.println(s);
//
//        byte[] bytes1=new byte[10];
//        int n1=inputStream.read(bytes1);  只剩下5个字节,实际读取了5个字节  数组后五个是默认值(无效数据)
//        System.out.println("读取的字节数:"+n1);
//        String s1=new String(bytes1);
//        System.out.println(s1);

//        byte[] buttef=new byte[10];
//        while (true){
//            int n=inputStream.read(buttef);
//            if (n!=-1){
//                String s=new String(buttef,0,n);
//                System.out.println(s);
//            }else {
                  //如果是-1表示读取到了文件末尾,结束循环
//                break;
//            }
//        }
        //推荐写法
        byte[] buttef = new byte[10];
        int n;
        while ((n = inputStream.read(buttef)) != -1) {
            String s = new String(buttef, 0, n);
            System.out.println(s);
        }
    }

案例:

文件的复制

 /*
    文件复制
    */
    public static void main(String[] args) throws IOException {
        //1.定义源文件和目标文件的File对象
        File f1 = new File("d:/a.txt");
        File newFile = new File("D:/aa/newFile");

        //2,定义输入输出流关联文件
        InputStream inputStream = new FileInputStream(f1);
        OutputStream outputStream = new FileOutputStream(newFile);

        //使用输入流读取内容,然后把读取的内容写入目标文件中

        //一个一个字节进行读写
//        int n;
//        while((n=inputStream.read())!=-1){
//            outputStream.write(n);
//        }
        //使用缓冲区读写
        long Start=System.currentTimeMillis();

        byte[] bytes=new byte[1024];
        int n;
        while ((n=inputStream.read(bytes))!=-1){
            outputStream.write(bytes,0,n);
        }
        Long stop=System.currentTimeMillis();

        System.out.println("耗时:"+(stop-Start));

        //使用io复制视频

    }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值