输入和输出流

一、前言

在Java开发中,IO流(输入输出流) 是数据传输的核心基础,几乎所有文件操作、网络数据传输、日志读写功能都依赖IO流实现。

很多新手学习IO流时,会被字节流、字符流、缓冲流的各种类搞混淆。本文将用最通俗的语言、分层分类讲解IO流核心知识点,搭配可直接运行的完整代码,帮你彻底吃透Java基础IO体系,适合收藏复盘、博客归档。

二、IO流核心概念与分类

  1. 什么是IO流?
  • I(Input 输入):从外部设备(文件、网络) 读取数据到内存,对应输入流
  • O(Output 输出):从内存写出数据到外部设备,对应输出流
  • 流:数据在设备与内存之间传输的有序字节/字符序列,像水流一样单向传输
  1. IO流四大核心父类(所有流的顶层抽象)

分类 字节流(处理所有文件) 字符流(仅处理文本文件)
输入流  InputStream (抽象类)  Reader (抽象类)
输出流  OutputStream (抽象类)  Writer (抽象类)

  1. 流的使用核心规则

1. 字节流:可处理任意文件(图片、视频、音频、文档、压缩包)
2. 字符流:仅处理纯文本文件(txt、java、md),自带编码适配,无乱码
3. 所有IO流使用完毕必须关闭,推荐JDK7+  try-with-resources  自动关流(无需手动 close() )

三、字节流实战(基础核心)

字节流以字节为单位传输数据,是通用性最强的流,底层传输一切文件的本质都是字节。

  1. FileInputStream 字节输入流(读取文件)

功能:读取任意文件的字节数据到内存
import java.io.FileInputStream;
import java.io.IOException;

/**

  • 字节输入流:读取任意文件
    */
    public class FileInputStreamDemo {
    public static void main(String[] args) {
    // try-with-resources:自动关闭流,无需手动释放资源
    try (FileInputStream fis = new FileInputStream("test.txt")) {
    // 定义字节缓冲区,一次读取1024字节(提升效率)
    byte[] buffer = new byte[1024];
    int len; // 记录本次实际读取的字节数

    // 循环读取文件,读取完毕返回-1,结束循环
    while ((len = fis.read(buffer)) != -1) {
    // 将字节数组转为字符串,输出读取内容
    String content = new String(buffer, 0, len);
    System.out.print(content);
    }
    } catch (IOException e) {
    e.printStackTrace();
    }
    }
    }

  1. FileOutputStream 字节输出流(写入文件)

功能:将内存数据写出到文件,支持覆盖写入和追加写入
import java.io.FileOutputStream;
import java.io.IOException;

/**

  • 字节输出流:写入文件
  • 构造方法第二个参数:true=追加写入,false/不传=覆盖写入
    */
    public class FileOutputStreamDemo {
    public static void main(String[] args) {
    // 追加写入:文件不存在则创建,存在则在末尾新增内容
    try (FileOutputStream fos = new FileOutputStream("test.txt", true)) {
    // 写入字节数据
    String content = "\nJava字节流写入测试";
    fos.write(content.getBytes());
    System.out.println("数据写入成功!");
    } catch (IOException e) {
    e.printStackTrace();
    }
    }
    }

posted @ 2026-06-14 16:51  2295209806  阅读(4)  评论(0)    收藏  举报