当前位置: 首页 > news >正文

java IO流【1】简介、入门

文章目录

  • IO简介
    • 什么是IO
    • 数据源
    • 流的概念
    • Java中四大IO抽象类
      • Inputstream/OutputStream
      • Reader/Writer
    • java中流的概念详细解析
      • 按流的方向分类
      • 按处理的数据单元分类
      • 按处理对象不同分类
    • IO类的体系
  • IO流入门
    • 第一个简单的IO流对象程序
      • 演示一
      • 演示二

IO简介

什么是IO

  • 对于任何程序设计语言而言,输入输出(lnput/output)系统都是非常核心的功能。程序运行需要数据,数据的获取往往需要跟外部系统进行通信,外部系统可能是文件、数据库其他程序、网络、IO设备等等。外部系统比较复杂多变,那么我们有必要通过某种手段进行抽象、屏蔽外部的差异,从而实现更加便捷的编程。
    • 输入(lnput)指的是:可以让程序从外部系统获得数据(核心含义是“读”,读取外部数据)。
    • 常见的应用:
      • 读取硬盘上的文件内容到程序。例如:播放器打开一个视频文件、word打开一个doc文件。
      • 读取网络上某个位置内容到程序。例如:浏览器中输入网址后,打开该网址对应的网址的内容。
    • 输出(Output)指的是:程序输出数据给外部系统从而可以操作外部系统(核心含义是“写”,将数据写出到外部系统)。
      • 常见的应用有:将数据写到硬盘中。例如:我们编辑完一个word文档后,将内容写到硬盘上进行保存。

数据源

  • ***数据源DataSource,提供数据的原始媒介。***常见的数据源有:数据库、文件、其他程序、内存、网络连接、IO设备。
  • 数据源分为:源设备、目标设备。
    • 源设备:为程序提供数据,一般对应输入流。
    • 目标设备:程序数据的目的地,一般对应输出流。

程序和数据源的身份具有双重性。同一数据源可以同时是原设备和目标设备。程序的动作可以是读或写。

流的概念

  • 流是一个抽象、动态的概念,是一连串连续动态的数据集合。
  • 对于输入流而言,数据源就像水箱,流(Stream)就像水管中流动着的水流,程序就是最终的用户。通过流(AStream)将数据(Source)中的数据(information)输送到程序(Program)中。
  • 对于输出流而言,目标数据源就是目的地(dest),我们通过流(AStream)将程序(Program)中的数据(information)输送到目的数据源(dest)中。
    在这里插入图片描述

输入/输出流的划分是相对于程序而言的,而不是相对于数据源而言的。

Java中四大IO抽象类

  • 流可以理解为就是流通数据的管道。java中流分为字节流和字符流。
  • 字节流中提供了字节输入流和字节输出流。对应抽象类为Inputstream/OutputStream类。
  • 字符流中提供了字符输入流和字符输入流。对应抽象类为Reader/Writer类。
  • Inputstream/OutputStream和Reader/Writer类是所有IO流类的抽象父类。

Inputstream/OutputStream

  • InputStream此抽象类是表示字节输入流的所有类的父类。
    • *** Inputsteam是一个抽象类,它不可以实例化***。数据的读取需要由它的子类来实现。根据节点的不同,它派生了不同的节点流子类继承自Inputsteam的流都是用于向程序中输入数据,且数据的单位为字节(8bit)。
InputStream方法说明
int read()***读取一个字节的数据,并将字节的值作为int类型返回(0-255之间的一个值)。***如果未读出字节则返回-1(返回值为-1表示读取结束)
void close()关闭输入流对象,释放相关系统资源。
  • OutputStream抽象类是表示字节输出流的所有类的父类。输出流接收输出字节并将这些字节发送到某个目的地。
OutputStream方法说明
void write(int n)向目的地中写入一个字节。
void close()关闭输出流对象,释放相关系统资源。

Reader/Writer

方法名说明
ReaderReader用于读取的字符流抽象类,数据单位为字符。
int read():***读取一个字符的数据,并将字符的值作为int类型返回(0-65535之间的一个值,即Unicode值)。***如果未读出字符则返回-1(返回值为-1表示读取结束)。
void close();关闭流对象,释放相关系统资源。
WriterWriter用于输出的字符流抽象类,数据单位为字符
void write(int n)向输出流中写入一个字符
void close();关闭输出流对象,释放相关系统资源

java中流的概念详细解析

按流的方向分类

  • 输入流:数据流从数据源到程序(以Inputstream、Reader结尾的流)
  • 输出流:数据流从程序到目的地(以OutPutStream、Writer结尾的流)
    在这里插入图片描述

按处理的数据单元分类

  • 字节流:以字节为单位获取数据,命名上以Stream结尾的流一般是字节流。如FilelnputStream、FileOutputStream
  • 字符流:以学符为单位获取数据,命名上以Reader/Writer结尾的流一般是字符流。如FileReader、FWriter

按处理对象不同分类

  • 节点流:可以直接从数据源或目的地读写数据,如Filelnputstream、FileReader、DatalnputStream等。
  • 处理流:不直接连接到数据源或目的地,是”处理流的流”。通过对其他流的处理提高程序的性能,如Bufferedlnputstream、BufferedReader等。处理流也叫包装流。
  • 节点流处于IO操作的第一线,所有操作必须通过它们进行;处理流可以对节点流进行包装,提高性能或提高程序的灵活性。
    在这里插入图片描述

IO类的体系

在这里插入图片描述

  • 一句真言,作用总结【好好体会,值得回头品味】
名称用途说明
1.Inputstream/Outputstream字节流的抽象类
2. Reader/Writer字符流的抽象类
3.FilelnputStream/FileOutputStream节点流:以字节为单位直接操作“文件”
4.ByteArraylnputStream/ByteArrayOutputStream节点流:以字节为单位直接操作“字节数组对象”
5.ObjectlnputStream/objectOutputstream处理流:以字节为单位直接操作“对象”
6.Datalnputstream/DataOutputStream处理流:以字节为单位直接操作“基本数据类型与字符串类型”
7.FileReader/FileWrite节点流:以字符为单位直接操作“文本文件”(注意:只能读写文本文件)
8.BufferedReader/BufferedWriter处理流:将Reader/Writer对象进行包装,增加缓存功能,提高读写效率。
9.BufferedlnputStream/BufferedOutputStream处理流:将Inputstream/OutputStream对象进行包装,增加缓存功能,提高读写效率。
10.InputStreamReader/OutputStreamWriter处理流:将字节流对象转化成字符流对象
11.PrintStream处理流:将OutputStream进行包装,可以方便地输出字符,更加灵活。

IO流入门

第一个简单的IO流对象程序

  • 当程序需要读取数据源的数据时,就会通过IO流对象开启一个通向数据源的流,通过这个流对象的相关方法可以顺序读取数据源中的数据。

演示一

package IO流;

import java.io.FileInputStream;

/**
 * @author 缘友一世
 * date 2022/10/16-22:28
 */
public class Demo01 {
    public static void main(String[] args)  {
        FileInputStream fir=null;
        try {
            fir=new FileInputStream("C:\\demo.txt");
            int s1=fir.read();
            int s2=fir.read();
            int s3=fir.read();
            int s4=fir.read();
            System.out.println(s1);//输出a对应的ascii码值
            System.out.println(s2);
            System.out.println(s3);
            System.out.println(s4);//文件内容读取完毕,返回-1
        } catch (Exception e) {
            e.printStackTrace();
        }finally {
            if(fir!=null) {
                try {
                    fir.close();
                }catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }

    }
}

在这里插入图片描述

演示二

package IO流;

import java.io.FileInputStream;

/**
 * @author 缘友一世
 * date 2022/10/16-22:56
 */
public class Demo02 {
    public static void main(String[] args) {
        FileInputStream fir=null;
        try {
            fir=new FileInputStream("C:\\demo.txt");
            StringBuffer sb = new StringBuffer();

            int temp=0;
           while ((temp=fir.read())!=-1) {
               System.out.println(temp);
               sb.append((char)temp);
           }
            System.out.println(sb.toString());
        } catch (Exception e) {
            e.printStackTrace();
        }finally {
            if(fir!=null) {
                try {
                    fir.close();
                }catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }
    }
}

在这里插入图片描述

相关文章:

  • 长春做网站公司/搜索引擎营销的内容有哪些
  • 2022一级造价停考/重庆seo入门教程
  • 全球建筑网站/百度推广课程
  • 德州网站建设哪家专业/百度竞价排名广告定价
  • 网站运营商查询/广州seo黑帽培训
  • wordpress怎么切换成中文的/百度小说风云榜首页
  • Spring框架原理 | IOC/DI | Bean
  • Windows系统关闭指定端口
  • LeetCode 7. 整数反转
  • 4054原厂LTH7R座充充电管理IC
  • <C++的空间配置器>——《C++高阶》
  • [CG 从零开始] 2.弄清 OpenGL工具链
  • 支持JDK19虚拟线程的web框架,上篇:体验
  • 嵌入式linux驱动之并发
  • 【微信小程序入门到精通】— 事件处理中进行数据赋值以及传递参数
  • 【Linux】结合实例来看Linux系列指令
  • 读书心得二
  • Vue组件、Vue插件的创建使用