java中的IO流

java中的IO流 讲解超详细版

一、初始IO流

1.输入输出是任何程序设计语言都提供的功能,java语言从一开始就支持IO,最初是 通过java.io.*包中的类和接口提供的。

2.IO流中的 I:input;O :output ;流:stream

3.IO流的分类

第一种方式:以内存或者程序作为参考:将磁盘(硬盘)上的文件读入(输入)内存(程序)中的流就叫输入流,或者叫read;从内存或者程序中出来的就叫输出流,或者叫write。

第二种方式:按照数据的类型分,数据流又可以分为二进制流和文本流,其中二进制流也被称为字节流,一次读入一个字节,也就是8个比特位(一次读入8个二进制),这种流是万能的什么流都可以读取,包括文本文件、图像、音频和视频文件等等…。文本流也被称为字符流,这种流一次读取一个字符,这种流是针对文本文件存在的,不能读取图片、音频和视频等文件只能读取纯文本文件,文件扩展名为.txt,连word文件也不能读取。它们处理信息的基本单位分别是字节和字符。

假设文件file1.txt 中有 a中国bc

采用字节流的方式去读:

第一次读:读一个字节,正好读到’a’

第二次读:读一个字节,正好读到’中’的一半

第三次读:读一个字节,正好读到’中’的另一半

采用字符流的方式去读:

第一次读:读一个字符’a’字符('a’字符在windows系统中占用一个字节)

第二次读:'中’字读('中’字符在windows系统中占两个字节)

注意:

在Windows系统中,一个字母通常占用1个字节,使用ASCII编码表示,包括英文字母和一些常见的符号。而一个汉字在Windows系统中通常占用2个字节,使用UTF-16编码表示。UTF-16编码使用16位表示字符,对于基本的拉丁字符(如英文字母)和常见的汉字,每个字符通常占用2个字节。

Java 使用 Unicode 字符集来表示字符,而 Unicode 采用了变长编码方案,其中基本的拉丁字符和常见的汉字等字符通常使用 2 个字节(16位)表示。因此,在 Java 中,无论是一个字母还是一个汉字,字符类型 char 都占用 2 个字节。

  • IO流原理的初步图形化认识

java中的IO流_第1张图片

java中IO流的基本原理:

java中的IO流_第2张图片

二、java中需要重点掌握的java.io.*包中的流

有十六个:
java中的IO流_第3张图片

文件专属:(可以观察出文件专属的输入输出流的类名都有File)

java.io.FileInputStream (字节流/输入流)

java.io.FileOutputStream (字节流/输出流)

java.io.FileReader (字符流/输入流)

java.io.FileWriter (字符流/输出流)

转换流(将字节转换成字符流)

java.io.InputStreamReader (以reader为后缀属于字符流/输入流)

java.io.OutputStreamWriter (以writer为后缀属于字符流/输出流)

缓冲流专属: (buffered 翻译为 adj.缓冲的,v.缓冲 ,buffer的过去分词 )

java.io.BufferedReader 字符流/输入流

java.io.BufferedWriter 字符流/输出流

java.io.BufferedInputStream 字节流/输入流

java.io.BufferedOutputStream 字节流/输出流

数据流专属:

java.io.DateInputStream (字节流/输入流)

java.io.DateOutputStream (字节流/输出流)

标准输出流:

java.io.PrintWriter (字符流)

java.io.PrintStream (字节流)

三、输入输出流分别实现什么接口?有什么特点?

1、在 Java 的 java.io 包中,几乎所有的输入和输出流都实现了 Closeable 接口或其子接口 AutoCloseable。这意味着这些流都具有关闭功能,并且可以使用 close 方法来显式关闭流。

在使用流时,特别是对于涉及到底层资源(如文件、网络连接等)的流,最好在使用完毕后显式地调用 close 方法来关闭流,以确保资源的正确释放和回收。通常会使用 try-with-resources 语句块来自动关闭流,该语句块会在代码执行完毕或发生异常时自动关闭流,无需手动调用 close 方法。

需要注意的是,并非所有的流都是可关闭的。一些特殊的流,如 ByteArrayInputStreamByteArrayOutputStream 等内存流,不会占用底层资源,因此不需要显式地关闭。此外,一些流实现类可能会在其内部自动关闭底层资源,无需用户手动操作。

2、关闭流的原因

  • 资源回收:许多流操作会涉及底层资源,如文件、网络连接、数据库连接等。关闭流可以确保这些资源在使用完毕后被及时释放,避免资源泄漏和浪费。

  • 数据完整性:某些流操作可能需要将数据缓冲或刷新到目标位置,例如将数据写入文件或发送到网络。在关闭流之前,通过调用相应的刷新方法,可以确保数据被正确写入或发送,避免数据丢失或不完整。

  • 避免文件锁定:在某些情况下,如果流没有被关闭,底层资源(如文件)可能会保持锁定状态,这可能导致其他进程无法访问或修改该资源。通过关闭流,可以释放对资源的锁定,使其它进程能够正常操作相关文件或资源。

  • 提高性能:打开的流可能占用系统资源,如果不关闭它们,会导致资源的浪费和系统负担。通过及时关闭流,可以释放这些资源,提高系统性能和效率。

    ​ 关闭流是一种良好的编程习惯,可以保证资源的正确释放和回收,确保数据的完整性,避免文件锁定问题,并提高系统性能。尽量在不需要使用流时及时关闭,可以使用try-with-resources语句块自动关闭流,或者在适当的地方显式调用流的close方法来关闭流。

你可能感兴趣的:(java,开发语言,intellij-idea)