Java 编程中的魔法之门:探索I/O流的奇妙世界

news2024/10/3 19:12:36

文章目录

    • 什么是I/O流?
    • I/O 流的层次结构
      • 1. 字节流(Byte Streams)
      • 2. 字符流(Character Streams)
      • 3. 缓冲流(Buffered Streams)
      • 4. 数据流(Data Streams)
      • 5. 对象流(Object Streams)
    • I/O 流的应用场景
      • 1. 文件操作
      • 2. 网络通信
      • 3. 用户输入输出
      • 4. 数据持久化
      • 5. 图像、音频、视频处理
    • 示例:读写文件数据
    • 总结

在这里插入图片描述

🎉欢迎来到Java学习路线专栏~Java 编程中的魔法之门:探索I/O流的奇妙世界


  • ☆* o(≧▽≦)o *☆嗨~我是IT·陈寒🍹
  • ✨博客主页:IT·陈寒的博客
  • 🎈该系列文章专栏:Java学习路线
  • 📜其他专栏:Java学习路线 Java面试技巧 Java实战项目 AIGC人工智能 数据结构学习
  • 🍹文章作者技术和水平有限,如果文中出现错误,希望大家能指正🙏
  • 📜 欢迎大家关注! ❤️

当谈及Java编程的核心要素时,I/O流(输入/输出流)无疑是其中之一。I/O流在Java中扮演着重要角色,用于在程序和外部世界之间传输数据。本文将深入探讨Java中的I/O流,介绍不同类型的流以及它们在实际应用中的作用。

在这里插入图片描述

什么是I/O流?

I/O流是Java中处理输入和输出操作的机制。它是连接程序与外部数据源(如文件、网络、键盘、屏幕等)的桥梁,允许数据在程序和外部环境之间流动。I/O流分为两类:输入流和输出流。

  • 输入流(Input Stream): 用于从外部数据源读取数据到程序中。它从源(如文件、网络)读取数据,供程序使用。

  • 输出流(Output Stream): 用于将程序中的数据写入到外部目标(如文件、网络)。它将数据从程序传输到指定的目标。
    在这里插入图片描述

I/O 流的层次结构

Java 提供了丰富的 I/O 流类,这些类按照功能和用途被组织成不同的层次结构。这些类主要位于 java.io 包中,并涵盖了以下几个关键层次:
在这里插入图片描述

1. 字节流(Byte Streams)

字节流以字节为单位读写数据,适用于处理二进制数据。它是 I/O 操作的基础,用于处理图像、音频、视频等二进制文件。

  • InputStream 和 OutputStream: 用于读取和写入字节流,是字节流操作的基本类。
try (InputStream inputStream = new FileInputStream("input.txt");
     OutputStream outputStream = new FileOutputStream("output.txt")) {
    // 使用 inputStream 和 outputStream 进行读写操作
} catch (IOException e) {
    e.printStackTrace();
}

在这里插入图片描述

2. 字符流(Character Streams)

字符流以字符为单位读写数据,适用于处理文本数据。它们在读写文本文件时更方便,自动处理字符编码和解码。

  • Reader 和 Writer: 用于读取和写入字符流,适用于文本文件的读写。
try (Reader reader = new FileReader("input.txt");
     Writer writer = new FileWriter("output.txt")) {
    // 使用 reader 和 writer 进行字符流读写操作
} catch (IOException e) {
    e.printStackTrace();
}

3. 缓冲流(Buffered Streams)

缓冲流是对字节流和字符流的功能增强,通过缓冲区提高读写效率。它们适用于大量数据的读写操作。

在这里插入图片描述

  • BufferedInputStream 和 BufferedOutputStream: 对字节流进行缓冲处理。
try (BufferedInputStream bufferedInput = new BufferedInputStream(new FileInputStream("input.txt"));
     BufferedOutputStream bufferedOutput = new BufferedOutputStream(new FileOutputStream("output.txt"))) {
    // 使用 bufferedInput 和 bufferedOutput 进行缓冲流读写操作
} catch (IOException e) {
    e.printStackTrace();
}
  • BufferedReader 和 BufferedWriter: 对字符流进行缓冲处理。
try (BufferedReader bufferedReader = new BufferedReader(new FileReader("input.txt"));
     BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter("output.txt"))) {
    // 使用 bufferedReader 和 bufferedWriter 进行缓冲流读写操作
} catch (IOException e) {
    e.printStackTrace();
}

4. 数据流(Data Streams)

数据流用于以基本数据类型为单位进行读写操作,方便对数据进行输入和输出。这对于处理基本数据类型很有用。
在这里插入图片描述

  • DataInputStream 和 DataOutputStream: 用于读写基本数据类型。
try (DataInputStream dataInput = new DataInputStream(new FileInputStream("data.dat"));
     DataOutputStream dataOutput = new DataOutputStream(new FileOutputStream("data.dat"))) {
    // 使用 dataInput 和 dataOutput 进行数据流读写操作
} catch (IOException e) {
    e.printStackTrace();
}

5. 对象流(Object Streams)

对象流用于将 Java 对象进行序列化和反序列化,实现对象的持久化存储和传输。
在这里插入图片描述

  • ObjectInputStream 和 ObjectOutputStream: 用于读写 Java 对象。
try (ObjectInputStream objectInput = new ObjectInputStream(new FileInputStream("object.dat"));
     ObjectOutputStream objectOutput = new ObjectOutputStream(new FileOutputStream("object.dat"))) {
    // 使用 objectInput 和 objectOutput 进行对象流读写操作
} catch (IOException e) {
    e.printStackTrace();
}

I/O 流的应用场景

I/O 流在 Java 编程中有广泛的应用,以下是一些典型的应用场景:

1. 文件操作

try (BufferedReader reader = new BufferedReader(new FileReader("file.txt"));
     BufferedWriter writer = new BufferedWriter(new FileWriter("output.txt"))) {
    // 从文件读取数据,写入到另一个文件
} catch (IOException e) {
    e.printStackTrace();
}

2. 网络通信

try (Socket socket = new Socket("localhost", 8080);
     PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
     BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()))) {
    // 与服务器进行数据交换
} catch (IOException e) {
    e.printStackTrace();
}

3. 用户输入输出

Scanner scanner = new Scanner(System.in);
System.out.print("请输入姓名:");
String name = scanner.nextLine();
System.out.println("你输入的姓名是:" + name);

4. 数据持久化

try (ObjectOutputStream objectOutput = new ObjectOutputStream(new FileOutputStream("data.dat"));
     ObjectInputStream objectInput = new ObjectInputStream(new FileInputStream("data.dat"))) {
    // 将对象进行序列化和反序列化,实现数据持久化
} catch (IOException e) {
    e.printStackTrace();
}

5. 图像、音频、视频处理

try (FileInputStream inputStream = new FileInputStream("image.jpg");
     FileOutputStream outputStream = new FileOutputStream("copy_image.jpg")) {
    // 对图像文件进行读取和复制
} catch (IOException e) {
    e.printStackTrace();
}

示例:读写文件数据

下面通过一个简单的示例来演示如何使用I/O流读写文件数据:

import java.io.*;

public class FileIOExample {
    public static void main(String[] args) {
        try {
            // 写入数据到文件
            FileOutputStream fos = new FileOutputStream("data.txt");
            OutputStreamWriter osw = new OutputStreamWriter(fos);
            BufferedWriter bw = new BufferedWriter(osw);
            bw.write("Hello, Java I/O!");
            bw.close();

            // 从文件读取数据
            FileInputStream fis = new FileInputStream("data.txt");
            InputStreamReader isr = new InputStreamReader(fis);
            BufferedReader br = new BufferedReader(isr);
            String line;
            while ((line = br.readLine()) != null) {
                System.out.println(line);
            }
            br.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

总结

I/O流是Java中重要的编程概念,用于实现数据在程序和外部环境之间的交互。通过不同类型的流,我们可以在文件、网络、屏幕等数据源之间传输数据。无论是文件操作、网络通信还是用户交互,I/O流都在Java编程中扮演着重要角色。熟练掌握I/O流的使用将帮助你更好地处理数据输入和输出,提升程序的功能和性能。通过不断实践和深入学习,可以在 Java 编程中熟练地使用各种类型的 I/O 流,从而为应用程序增添更多的功能和价值。


🧸结尾


❤️ 感谢您的支持和鼓励! 😊🙏
📜您可能感兴趣的内容:

  • 【Java面试技巧】Java面试八股文 - 掌握面试必备知识(目录篇)
  • 【Java学习路线】2023年完整版Java学习路线图
  • 【AIGC人工智能】Chat GPT是什么,初学者怎么使用Chat GPT,需要注意些什么
  • 【Java实战项目】SpringBoot+SSM实战:打造高效便捷的企业级Java外卖订购系统
  • 【数据结构学习】从零起步:学习数据结构的完整路径

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/953491.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

STM32 FREERTOS osDelayUntil()异常

问题: 在使用osDelayUntil()进行固定延时时发现不起作用,程序不能按照预期的延时进行执行(比延时要快)。 #define taskMBSysManage_Delay_TIME 1000 TickType_t xLastWakeTime; xLastWakeTime xTaskGe…

软考A计划-网络工程师-复习背熟-广域网和接入网技术和因特网

点击跳转专栏>Unity3D特效百例点击跳转专栏>案例项目实战源码点击跳转专栏>游戏脚本-辅助自动化点击跳转专栏>Android控件全解手册点击跳转专栏>Scratch编程案例点击跳转>软考全系列点击跳转>蓝桥系列 👉关于作者 专注于Android/Unity和各种游…

高忆管理:庄家尾盘拉升的目的?

股市里的庄家是指一些出资者和基金司理,他们以高明的技巧和强大的实力操作股市。庄家尾盘拉升则是指在股市收盘前,庄家在商场进行一些操盘操作,然后推高股价。那么庄家尾盘拉升的目的是什么?在本文中,我们将从多个角度…

33、Flink之hive介绍与简单示例

Flink 系列文章 1、Flink 部署、概念介绍、source、transformation、sink使用示例、四大基石介绍和示例等系列综合文章链接 13、Flink 的table api与sql的基本概念、通用api介绍及入门示例 14、Flink 的table api与sql之数据类型: 内置数据类型以及它们的属性 15、Flink 的ta…

油耳的人适合戴哪种耳机,油耳戴什么耳机不会掉

长时间佩戴入耳式耳机导致油耳朵?甚至耳朵受伤。这似乎是一个不可避免的问题,但不同耳机对听力的伤害程度却不尽相同。然而,目前为止,骨传导耳机是唯一一种在相同音量下对听力损伤最低的选择。这种耳机通过骨骼传递声音&#xff0…

亮数据:以色列一家让人向往的互联网公司,很强

大家好,我是二哥呀! 今天再给大家推荐一家小而美的互联网公司——亮数据,成立于 2014 年,总部设在以色列,全球目前约有 500 名员工,但却有超过 2000 个专利申报和计数。 我在他们的官网看到这样一段介绍&…

关于Echarts 绘制玫瑰图 (笔记)

目录 基于js文件绘图 基于vue3绘制玫瑰图 基于js文件绘图 // 定义一个配置对象 var option {// 图例设置legend: {top: bottom},// 工具栏设置toolbox: {show: true,feature: {mark: { show: true }, // 标记工具dataView: { show: true, readOnly: false }, // 数据视图工具r…

软件安全检测有哪些测试内容?怎么做

安全测试 信息安全检测是一个统称的概念,其概念的提出对于规范和明确信息安全日常工作具有重要作用。一般企业会委托第三方检测机构进行信息安全检测并且出具相关的软件安全检测报告。 信息安全检测依据是什么 根据国家标准、行业标准、地方标准或相关技术规范&a…

不会电脑分区?看这里,教你轻松学会!

随着计算机技术的不断发展,电脑分区成为管理和优化硬盘空间的重要手段之一。它是对硬盘进行逻辑划分的过程,通过将硬盘分成不同的区域,提高数据访问效率,同时保护系统和用户数据的安全性。本文将为您介绍两种常用的电脑分区方法&a…

螺线管线圈的用途是什么

螺线管线圈是一种电子元器件,通常用于电感器和变压器。螺线管线圈可以是单层的或多层的,并且可以根据特定的电气参数进行设计。它们被广泛应用于电子设备和通信系统中,以满足各种应用的要求。 螺线管线圈主要用于电感器和变压器。电感器是一种…

科技云报道:AI+云计算共生共长,能否解锁下一个高增长空间?

科技云报道原创。 在过去近一年的时间里,AI大模型从最初的框架构建,逐步走到落地阶段。 然而,随着AI大模型深入到千行百业中,市场开始意识到通用大模型虽然功能强大,但似乎并不能完全满足不同企业的个性化需求。 大…

开源项目-内容管理系统

哈喽,大家好,今天给大家带来一个开源项目-内容管理系统。项目通过SpringBoot实现 主要功能有 - 内容:发帖、评论、帖子分类、分页、回帖统计、访问统计、表单验证 - 用户:权限、资料、头像、邮箱验证 - 管理:后台管理、统计图表、帖子/分类管理 注册 通过用户名,邮箱,…

实现基于栈的表达式求值计算器(难度4/10)

本作业主要考察:解释器模式的实现思想/栈结构在表达式求值方面的绝对优势 C数据结构与算法夯实基础作业列表 通过栈的应用,理解特定领域设计的关键作用,给大家眼前一亮的感觉。深刻理解计算机语言和人类语言完美结合的杰作。是作业中的上等…

长胜证券:华为“黑科技”点燃A股炒作激情

8月29日,在未举行相关发布会的情况下,华为新款手机Mate60Pro悄然上线开售,并在一小时内售罄。 金融出资报记者注意到,跟着商场对新机重视的继续发酵,其中的各种技能打破也愈加受到重视,其影响很快扩散到资…

前端(十五)——开源一个用react封装的图片预览组件

👵博主:小猫娃来啦 👵文章核心:开源一个react封装的图片预览组件 文章目录 组件开源代码下载地址运行效果展示实现思路使用思路和api实现的功能数据和入口部分代码展示 组件开源代码下载地址 Gitee:点此跳转下载 CSDN…

叉式移动机器人(AGV/AMR)解决方案

叉式移动机器人(AGV/AMR)是在叉车上加载各种导引技术,构建地图算法,辅以避障安全技术,实现叉车的无人化作业。 ▲ 叉式移动机器人无人化作业 ▲叉式移动机器人常见车型 叉式移动机器人在行业初期,各机构、…

Hugging Face--Transformers

pipeline 在这里插入图片描述 AutoClass AutoClass 是一个能够通过预训练模型的名称或路径自动查找其架构的快捷方式. 你只需要为你的任务选择合适的 AutoClass 和它关联的预处理类。 AutoTokenizer AutoModel 保存模型 自定义模型构建 Trainer - PyTorch优化训练循环 参考资…

概念解析 | 量子时代的灵感:探索量子感知技术

注1:本文系“概念解析”系列之一,致力于简洁清晰地解释、辨析复杂而专业的概念。本次辨析的概念是:量子感知技术。 量子时代的灵感:探索量子感知技术 量子感知技术是一个充满希望和挑战的新兴领域。在此,我们将深入探讨这个主题,概述其背景,解释其工作原理,讨论现有的…

AI绘画:多巴胺3D女孩风格分享【附Midjourney关键词Prompt】

文末附完整的教程,已经放在网盘,需要的自己下载 今年,多巴胺风格大火特火! 你知道吗,这种色彩斑斓,一看就心情大好的风格,简直就像是甜到心坎的糖果。 而其中最受欢迎的,就是那些多…

服务器数据恢复- RAID5出现故障后恢复数据和操作系统的案例

服务器数据恢复环境: 某品牌服务器中有4块SAS硬盘组建了一组RAID5阵列,另外1块磁盘作为热备盘使用。上层操作系统为redhat linux,部署了一个数据库是oracle的OA。 服务器故障&初检: RAID5中一块磁盘离线后热备盘未自动激活re…