IO流的概念及用法(字节流、字符流、节点流、处理流)

Io流

1、Java流类图结构:

在这里插入图片描述

2、IO流的概念

       在java中把不同的输入/输出源(键盘,文件,网络连接等)抽象表述为“流”(stream)。通过流的形式允许java程序使用相同的方式来访问不同的输入/输出源。

3、IO流的分类

  1. 按数据流的方向分为 输入流、输出流

       IO流的输入、输出是相对于我们的程序而言

       输入流:从其他地方(本地文件,网络上的资源等)获取资源输入到我们的程序中

       输出流:从我们的程序中输出到其他地方(本地文件),将一个字符串保存到本地文件中,就需要使用输出流。

  1. 按处理数据单位不同分为 字节流、字符流

       1字符 = 2字节 、 1字节(byte) = 8位(bit) 、 一个汉字占两个字节长度

       字节流:每次读取(写出)一个字节(8位二进制),可以传输所有种类的资源,例如:文本,图片,视频等。

       字符流:每次读取(写出)两个字节(16位二进制),纯文本建议首选字符流传输,该流只适用字符传输,传输其他资源会造成部分丢失。

  1. 按功能不同分为 节点流、处理流

       节点流:以从或向一个特定的地方(节点)读写数据。如FileInputStream

       处理流:是对一个已存在的流的连接和封装,通过所封装的流的功能调用实现数据读写。如BufferedReader。处理流的构造方法总是要带一个其他的流对象做参数。一个流对象经过其他流的多次包装,称为流的链接。

4、流的用途分类

       抽象基类无法直接创建实例。

分类字节输入流字节输出流字符输入流字符输出流
抽象基类InputStreamOutputStreamReaderWriter
访问文件FileInputStreamFileOutputStreamFileReaderFileWriter
访问数组ByteArrayInputStreamByteArrayOutputStreamCharArrayReaderCharArrayWriter
访问管道PipedInputStreamPipedOutputStreamPipedReaderPipedWriter
访问字符串StringReaderStringWriter
缓冲流BufferedInputStreamBufferedOutputStreamBufferedReaderBufferedWriter
转换流InputStreamReaderOutputStreamWriter
对象流ObjectInputStreamObjectOutputStream
抽象基类FilterInputStreamFilterOutputStreamFilterReaderFilterWriter
打印流PrintStreamPrintWriter
推回输入流PushbackInputStreamPushbackReader
数据流DataInputStreamDataOutputStream
其中加粗表示节点流,必须直接与指定的物理节点关联,斜体下划线表示处理流

5、代码实例

1.使用字节流(不带处理流)实现文本文件的复制,将a.txt复制到b.txt

public static void main(String[] args) {
        InputStream in=null;
        OutputStream os = null;
        try {
            //定位目标文件位置,并创建字节输出流
            os = new FileOutputStream("D:\\music\\b.txt");
            //定位源文件位置,并创建字节输入流
            in = new FileInputStream("D:\\music\\a.txt");
            //读取源文件内容,创建中转站,提高读取速度
            byte[] bytes = new byte[4];
            int len;
            while ((len=in.read(bytes))!=-1){
                //写入目标文件
                os.write(bytes,0,len);
            }
            System.out.println("复制完成");
        }  catch (Exception e) {
            e.printStackTrace();
        }finally {
            try {
                if (in!=null) {
                    in.close();
                }
                if (os!=null) {
                    os.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

2.使用字节流(带处理流),实现写入写出数据,纯文本不建议使用DataInputStream和DataOutputStream,可能会出现编码问题。建议使用字符流。

public static void main(String[] args) throws Exception {
        //创建数据输出流,节点流
        FileOutputStream fos = new FileOutputStream("D:\\music\\bw.txt");
        //使用处理流套接增强功能
        BufferedOutputStream bos = new BufferedOutputStream(fos);
        DataOutputStream dos = new DataOutputStream(bos);
        //创建数据输入流,节点流
        FileInputStream fis = new FileInputStream("D:\\music\\bw.txt");
        //处理流套接,增强功能
        BufferedInputStream bis = new BufferedInputStream(fis);
        DataInputStream dis = new DataInputStream(bis);
        dos.writeUTF("哈哈哈哈");
        //数据刷出
        dos.flush();
        //读取数据
        String s = dis.readUTF();
        System.out.println(s);
        //关流
        dos.close();
        dis.close();
    }

3.使用字符流(带处理流),复制文本文件,将a.txt复制到bw.txt

public static void main(String[] args) throws Exception{
        //字符缓冲输入流
        BufferedReader br = new BufferedReader(new FileReader("D:\\music\\a.txt"));
        //字符缓冲输出流
        BufferedWriter bw = new BufferedWriter(new FileWriter("D:\\music\\bw.txt"));
        String line =null;
        //一行一行读
        while ((line = br.readLine())!= null){
            System.out.println(line);
            //将字符串写出去
            bw.write(line);
            //换行
            bw.newLine();
        }
        //数据刷出
        bw.flush();
        //关流时 关闭 顶层流即可  不需要将 字节流也关掉
        br.close();
        bw.close();
    }
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值