IO流的介绍及举例说明

本文详细介绍了Java中的IO流,包括输入流和输出流,字符流与字节流的概念及区别。通过示例展示了FileReader用于读取文本文件内容,以及FileInputStream用于复制图片文件到另一位置的操作。强调了在处理非纯文本数据时通常使用字节流。
摘要由CSDN通过智能技术生成

IO,即(input,output)输入和输出

那什么是流呢?

流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象。即数据在两设备间的传输称为流,流的本质是数据传输,根据数据传输特性将流抽象为各种类,方便更直观的进行数据操作。

IO流的分类:

1、根据处理的数据类型不同可以分为:字符流和字节流

2、根据数据的流向不同可以分为:输入流和输出流

字符流的使用情况:

当读写的数据都是字符数据时,就要使用字符流。比如说文本文件(.txt)

字节流的使用情况:

读取到的数据不需要经过编码或者解码的情况下使用字节流。比如说图片数据、视频数据

所以我们在程序开发中绝大部分情况都是用字节流的。

字符流 = 字节流 + 编码(解码)

字符流和字节流的区别:

1、读写单位的不同字节流以字节(8bit)为单位,字符流以字符为单位,根据码表映射字符,一次可能读多个字节。

2、处理对象不同字节流能处理所有类型的数据(如文本、图片、视频),而字符流只能处理字符类型的数据。

总结:只要不是纯文本的数据,都用字节流。

对了,我们所说的输入和输出都是以内存为参照物的。

如图:

 下面以纯文本文件为例,测试用FileReader(文件字符输入流)读取文件中的文本内容并输出出来:

 @Test
    public void testFileReader1() throws IOException {
        FileReader fileReader = null;
        try {
            fileReader = new FileReader("io.txt");
            
            int ch = -1;
            //读取文件中的字符数据赋值给ch,当ch的值为-1时说明文件已读取完毕
            while ((ch = fileReader.read()) != -1){
                System.out.println(ch);
                System.out.println((char) ch);
            }

        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            if (fileReader != null){
                fileReader.close();
            }
        }
    }

 字节流和字符流类似,将FileReader替换为FileInputStream即可,这里因为图片没法打印出来,我们选择将其复制到另一个文件中:

 @Test
    public void testInputOutputStream(){
        FileInputStream fileInputStream = null;
        FileOutputStream fileOutputStream = null;
        try {
            fileInputStream = new FileInputStream("IMG_2843.JPG");
            //将上面路径中的图片复制到下面的路径
            fileOutputStream = new FileOutputStream("yy.JPG");
            byte[] buffer = new byte[1024];
            int length = -1;
            while ((length = fileInputStream.read(buffer)) != -1){
                    fileOutputStream.write(buffer,0,length);
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            if (fileOutputStream != null){
                try {
                    fileOutputStream.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if (fileInputStream != null){
                try {
                    fileInputStream.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值