【IO流】32.IO流

IO流

    • 1. IO流
      • 1.1 概述
      • 1.2 作用
      • 1.3 分类
      • 1.4 注意事项

1. IO流

IO流:存储和读取数据的解决方案。

I:input
O:output
:像水流一样传输数据

1.1 概述

IO(Input/Output)流是计算机程序用于与外部设备进行数据交换的一种抽象概念。它是计算机输入输出操作的一种方式,常见于文件和网络通信等场景。

  • IO流可以分为输入流和输出流两种类型。输入流用于从外部设备(如键盘、文件、网络等)读取数据到程序中,而输出流则用于将程序中的数据写入到外部设备中。

  • 在Java中,IO流分为字节流和字符流两种类型。字节流主要用于处理二进制数据,而字符流则用于处理文本数据。常见的字节流类有InputStreamOutputStream,而常见的字符流类有Reader和Writer。

IO流的主要包括以下几个方面:

  1. 输入流和输出流:用于读取和写入数据。

  2. 字节流和字符流:处理不同类型的数据。

  3. 缓冲流:用于提高读写数据的效率。

  4. 文件IO流:用于读写文件数据。

  5. 网络IO流:用于网络通信数据的传输。

1.2 作用

用于读写数据(本地文件、网络)

  1. 文件读写:IO流能够读取和写入文件数据。

    通过文件输入流(FileInputStream、BufferedInputStream、FileReader等)可以从文件中读取数据,而文件输出流(FileOutputStream、BufferedOutputStream、FileWriter等)可以将数据写入文件中。这为程序的持久化存储提供了便捷的方式。

  2. 网络通信:IO流在网络通信中发挥着重要的作用。

    通过网络输入流(InputStream)和网络输出流(OutputStream),程序可以从网络中接收数据和发送数据。例如,在客户端和服务器之间传输数据时,可以使用Socket类和相关的IO流来进行读写操作。

  3. 键盘输入和屏幕输出:通过标准输入流(System.in)和标准输出流(System.out),程序可以从键盘获取输入信息,并将结果输出到屏幕上。这为与用户交互、输出调试信息等提供了基础的IO操作。

  4. 内存操作:除了文件和网络,IO流也可以用于内存中的数据操作。

    例如,通过字节数组输入流(ByteArrayInputStream)和字节数组输出流(ByteArrayOutputStream),程序可以将数据读写到内存中的字节数组中。

  5. 序列化和反序列化:IO流还可以用于对象的序列化和反序列化。

    通过对象输入流(ObjectInputStream)和对象输出流(ObjectOutputStream),程序可以将对象转化为字节序列并进行存储或传输,或者将字节序列重新还原为对象。这在分布式系统、远程调用等场景中很有用。

1.3 分类

在这里插入图片描述

  • IO流按照流向分类:
    • 输出流:程序 —— > 文件

    • 输入流:文件 —— > 程序

  • IO流按照操作文件的类型分类:
    • 字节流:可以操作所有类型的文件

    • 字符流:只能操作纯文本文件

    纯文本文件:用Windows系统自带的记事本打开能够读懂的文件。例如txt文件、md文件、xml文件、lrc文件

1.4 注意事项

  1. 使用try-with-resources或手动关闭流:确保及时关闭IO流以释放资源并避免资源泄漏。可以使用try-with-resources语句(Java 7及以上版本)或在finally块中手动关闭流。

  2. 适当处理异常:IO操作可能会抛出IOException等异常,因此需要适当处理这些异常。捕获异常、记录日志或向上层抛出异常都是处理异常的常见方式。

  3. 注意缓冲区的刷新:对于缓冲流(如BufferedInputStream、BufferedOutputStream),在适当的时机要调用flush()方法手动刷新缓冲区,以确保数据被及时写入。

  4. 避免频繁IO操作:频繁的IO操作可能会影响程序性能,尽量合并读写操作以减少开销。可以使用缓冲流来批量读写数据,避免频繁的单字节操作。

  5. 处理字符编码:在使用字符流读写文本文件时,需要注意字符编码的设置,以确保正确地处理文本的编码格式。可以指定编码格式或使用默认编码。

  6. 正确处理流的顺序:在使用组合流(例如BufferedInputStream套在FileInputStream上)时,要确保正确的流的顺序,避免造成意外的错误。

  7. 判断流的可用性:在对流进行读取操作时,要时刻注意流的可用性(比如文件是否存在、网络连接是否正常),避免因为不可用的流而导致异常。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

ABC341 A-G

Toyota Programming Contest 2024#2(AtCoder Beginner Contest 341) - AtCoder B读不懂题卡了,F读假题卡了,开题开慢了rank了 A - Print 341 题意: 打印一串交替出现的包含N个0,N1个1的01串 代码&…

2024年【高处安装、维护、拆除】模拟考试题库及高处安装、维护、拆除实操考试视频

题库来源:安全生产模拟考试一点通公众号小程序 高处安装、维护、拆除模拟考试题库是安全生产模拟考试一点通生成的,高处安装、维护、拆除证模拟考试题库是根据高处安装、维护、拆除最新版教材汇编出高处安装、维护、拆除仿真模拟考试。2024年【高处安装…

【摸鱼日常】使用Docker部署RPG网页小游戏

一、本次实践介绍 1. 本次实践简介 本次实践部署环境为个人测试环境,快速使用docker部署RPG网页小游戏。 rootWellDone:/home/goodjob# uname -a Linux WellDone 6.5.0-14-generic #14~22.04.1-Ubuntu SMP PREEMPT_DYNAMIC Mon Nov 20 18:15:30 UTC 2 x86_64 x86_…

0风险开抖店,真的可以实现吗?多年电商运营告诉你答案!

大家好,我是电商糖果 普通人,手里存款不多,可以开抖店吗? 说实话2024年,不少朋友找糖果聊过这个问题。 手里没有那么资金,害怕风险太大,自己会陷进去。 但是这两年又没有特别好的轻资产创业…

精通C语言:打造高效便捷的通讯录管理系统

✨✨ 欢迎大家来到贝蒂大讲堂✨✨ 🎈🎈养成好习惯,先赞后看哦~🎈🎈 所属专栏:C语言项目 贝蒂的主页:Betty‘s blog 引言 在我们大致学习完C语言之后,我们就可以利用目前所学的知识去…

HarmonyOS一杯冰美式的时间 -- 验证码框

一、前言 像是短密码、验证码都有可能需要一个输入框,像是如下: 恰好在写HarmonyOS的时候也需要写一个验证码输入框,但是在实现的时候碰了几次灰,觉得有必要分享下,故有了此篇文章。 如果您有任何疑问、对文章写的不…

C++| VS+QT快速入门

VSQT C开发QT的方式VSQT和QT Creater的区别VSQT使用:入门案例——加法器创建项目UI文件运行项目编辑UI界面代码交互编写中文显示乱码 C开发QT的方式 C开发QT有两种方式,一种是VSQT,还有一种是QT Creater。 QT Creater的用法已经在C学习| QT…

Java Lambda表达式:简化编程,提高效率

Java Lambda表达式:简化编程,提高效率 1. 使用Lambda表达式进行集合遍历1.1 未使用Lambda表达式:1.2 使用Lambda表达式: 2. 使用Lambda表达式进行排序2.1 未使用Lambda表达式:2.2 使用Lambda表达式: 3. 使用…

Sora:将文本转化为视频的创新之旅

一.能力 我们正致力于让 AI 掌握理解和模拟物理世界动态的能力,旨在培养能够协助人们解决现实世界互动问题的模型。 介绍 Sora——我们开发的文本到视频转换模型。Sora 能够根据用户的输入提示,生成最长达一分钟的高质量视频内容。 目前,Sora…

MCU中断控制

目录 一、中断相关基础知识 1、NVIC:嵌套向量中断控制器 2、可屏蔽中断和不可屏蔽中断的区别 3、中断优先级 4、常见特殊中断 二、中断相关寄存器 三、中断使用步骤: 一、中断相关基础知识 1、NVIC:嵌套向量中断控制器 (1) 它是内核的…

1.8 NLP自然语言处理

NLP自然语言处理 更多内容,请关注: github:https://github.com/gotonote/Autopilot-Notes.git 一、简介 seq2seq(Sequence to Sequence)是一种输入不定长序列,产生不定长序列的模型,典型的处理任务是机器翻译&#…

2.15练习

选择题 1. B2. B3. C4. D5. A6. B7. C8. B9. D10. B11. A12. B 填空题 1. a b c 2.string s: I like it. String t:A like it. 3. 30 10 30 n Learning

【复合多尺度熵与特征提取】一文看懂“复合多尺度熵”——复合多尺度样本熵、模糊熵、排列熵、包络熵、功率谱熵、能量熵、奇异谱熵及其MATLAB实现

在上一篇文章中,我们讲了多尺度熵的原理及MATLAB实现。 本篇要讲的是多尺度熵的一个改进特征提取方法——复合多尺度熵(Composite Multiscale Entropy, CMSE)。复合多尺度熵方法不仅继承了多尺度熵在揭示时间序列多尺度复杂性方面的优势&…

力扣题目训练(12)

2024年2月5日力扣题目训练 2024年2月5日力扣题目训练476. 数字的补数482. 密钥格式化485. 最大连续 1 的个数148. 排序链表164. 最大间距 2024年2月5日力扣题目训练 2024年2月5日第十二天编程训练,今天主要是进行一些题训练,包括简单题3道、中等题2道和…

c高级day4作业

终端输入一个字符,判断是大写字母小写字母还是数字字符。 #!/bin/bash read -p "input字符--->" a case $a in[[:upper:]])echo 大写字母$a;;[[:lower:]])echo 小写字母$a;;[0-9])echo 数字字符$a;;*)echo "error" esac终端输入年月&#x…

GIS 基于 MCDM-AHP 方法研究潜在风力发电厂区域

随着全球人口的迅速增长、现有不可再生能源的不足以及工业的快速发展,人们对可再生能源的兴趣与日俱增。除了化石燃料的有限供应外,由于无法避免其对环境造成的破坏,人们开始转向替代能源。风能是最具商业价值的能源之一,既环保又可持续。然而,为了使风力发电厂发挥最大效…

⭐北邮复试刷题103. 二叉树的锯齿形层序遍历

103. 二叉树的锯齿形层序遍历 给你二叉树的根节点 root ,返回其节点值的 锯齿形层序遍历 。(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行)。 示例 1:输入&#xff1a…

链式结构实现队列

链式结构实现队列 1.队列1.1队列的概念及结构1.2队列的实现 2. 队列的各种函数实现3. 队列的全部代码实现 1.队列 1.1队列的概念及结构 队列:只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表,队列具有先进先出 FIFO(Fi…

深入解析域名短链接生成原理及其在Python/Flask中的实现策略:一篇全面的指南与代码示例

为了构建一个高效且用户友好的域名短链服务,我们可以将项目精简为以下核心功能板块: 1. 用户管理 注册与登录:允许用户创建账户并登录系统。 这部分内容可以参考另一片文章实现: 快速实现用户认证:使用Python和Flask…

Aster实现一台电脑当两台使——副屏使用独立win账号

前言:笔者每年回家,都面临着想要和小伙伴一起玩游戏,但小伙伴没有电脑/只有低配电脑的问题。与此同时,笔者自身的电脑是高配置的电脑,因此笔者想到,能否在自己的电脑上运行游戏,在小伙伴的电脑上…