IO流(Input Output)

IO流(Input Output)

目录

1.IO系统中流的概念

2.IO系统中流的分类

3.掌握各种流的通用操作步骤

4.掌握主要流流的使用方法

5.掌握对象的序列化和反序列化

6.掌握文件类的使用方法

1.IO系统中流的概念

程序运行过程进行结束,数据就全部丢失,为了让操作后的数据永久的保存下来,我们需要外部存储器来完成

那么,如何完成内存和外存之间的数据传输呢?我们可以使用输出的(I/O)机制完成。

java类中提供了大量的类,可以帮助我们从不同的设备读取数据。并保存到不同的设备中,这些类统一放到java,io或者java.nio包中,统称java I/O系统。

其中 I 表示input表示输入,O表示Outinput,输出

在java当中把IO操作设计成了一个统一的模型,也就是“流模型”。

-------------------

数据源 管道 目的地 数据源-_->管道--->目的地


这种模型将输入和输入看成两个段点之间建立一根管道,然后数据源流水一样从从数据源流向目的地

2.IO系统中流的分类

在java中,流(Stream)的方向以内存作为参照物,当从数据源中的数据读取到内存当中,称为输入流,也叫读取流

当从内存中的数据写入数据源里时,输出流

在java中,按照分流数据梳理的最小单位(管道粗细)分,分为:

字节流----->以byte为最小单位传输 比如文本文档/音频/视频等等

字节流主要针对的是二进制的文件:

FileInputStream、BufferedInputStream、ObjectInputStream、OutputStream、FileOutputStream、BufferedOutputStream

ObjectOutputStream

字符流----->以char为最小单位传输

字符流主要针对文本文件:

Reader、FileReader、BufferedReader、InputStreamReader、Writer、FileWriter、BufferedWriter、OutputStreamWriter

PrintWriter一行行写出

在java中,按照流的功能分类:

节点流——————>可以直接从/向数据源读/写数据,也称低级流 如:FileInputStream、FileOutputStream

处理流----------------->可以在数据流传递过程中执行某个处理任务,也称低、高级流(不能单独使用,要连接在已经存在的流(处理流或者节点流))如:BufferedInputStream、BuffereOutputStream

缓存流------------------>缓冲区的作用主要是提高文件的读写功能,减少程序频繁从文件中获取数据和写入数据

流操作相关的类都在java.io包里存放

字节流有两个抽象父类:InputStream和OutputStream

字符流有两个抽象父类:Reader和Writer

如图

^

| (输出流)

OutinputStream | Writer

(字节流) < -------------- ---|------------------ > (字符流)

Inputstream | Reader

|(输入流)

\/

为什么父类要设计成抽象父类?

因为外部设备不同的读取方式会有所不同,所以在字节流和字节流的父类中,预留了读取数据的抽象方法,不同的子类可以根据自己的数据的特点分别实现。

流的选择

1.确认数据源 和 目的地(数据传输的方向,输入\输出)

2.确认管道粗细(以字节为单位或者以字符为单位传输)

流的操作

  1. 建立流

  2. 操作流(red/write)

  3. 关闭流

    输入流:red,close

    输出流:write flush close

缓存区

缓存区:缓冲区的作用主要是提高文件的读写功能,减少程序频繁从文件中获取数据和写入数据

O流中具有缓冲区的子类有四个:BufferedInputStream、BufferedOutputStream、BufferedReader、BufferedWriter。其中BufferedInputStream和BufferedOutputStream属于字节流的子类,BufferedReader,BufferedWriter属于字节流的子类

3.掌握各种流的通用操作步骤

一、节点流

1.字节流(InputStream 输入流)

方法 解释
read() 从流中读取下一个字节
read(byte[] e) 从输入流中读取一些字节,并存入数组b,会返回读取的字节个数
read(byte[] b,int off,int len) 从输入流中读取n字节,并存入数组B,off代表从第一个开始读取,len表示读取的长度。
close() 关闭流

    // 数据源   管道   目的地
        //1.建立数据源和目的地传输的管道
        try {
            InputStream inputStream = new FileInputStream("1.test");//1.test里面有个Hello World
//            2.处理数据
//            read()读取到流中的下一个字节数据,并返回该数据的Unicode.
//            如果流没有数据,则返回-1
            int n ;
            while ((n = inputStream.read()) != -1) {
                System.out.print((char) n);//一次性读取两个字
            }
            inputStream.close();
​
        } catch (FileNotFoundException e) {
            throw new RuntimeException(e);
        } catch (IOException e)
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值