Java IO流详解

IO流原理

IO流是基于流的概念,它将数据的输入和输出看作是一个连续的流。数据从一个地方流向另一个地方,流的方向可以是输入(读取数据)或输出(写入数据)。

IO流提供了一组丰富的类和方法来实现不同类型的输入和输出操作。

IO流的原理是通过流的管道将数据从源头传输到目标地。

源头可以是文件、网络连接、内存等

目标地可以是文件、数据库、网络等。

IO流分类

Java中的IO流可以按照数据的类型流的方向进行分类。

按数据类型分类

  字节流(Byte Stream):用于处理二进制字节数据

以字节为单位读写数据,适用于处理二进制字节数据,如图像、音频、视频等。常见的字节流类有InputStreamOutputStream

  字符流(Character Stream):用于处理字符文本数据

以字符为单位读写数据,适用于处理字符文本数据。字符流会自动进行字符编码和解码,可以处理多国语言字符。常见的字符流类有ReaderWriter

按流的方向分类

输入流(Input Stream):用于读取数据。

输入流从数据源读取数据,如文件、网络连接等。常见的输入流类有FileInputStreamByteArrayInputStreamSocketInputStream等。

输出流(Output Stream):用于写入数据。

输出流将数据写入到目标地,如文件、数据库、网络等。常见的输出流类有FileOutputStreamByteArrayOutputStreamSocketOutputStream等。

IO流的使用场景

IO流主要用于处理输入和输出操作,适用于以下场景:

文件读写:

通过IO流可以读取和写入文件中的数据,如读取配置文件、写入日志等。

网络通信:

通过IO流可以进行网络数据的传输和接收,如Socket通信、HTTP请求等。

数据库操作:

通过IO流可以将数据读取到内存中,或将内存中的数据写入到数据库中。

文本处理:

过IO流可以读取和写入文本文件,进行文本处理和操作。

常用的IO流类

 字节流类 :

 InputStream:用于从输入源读取字节数据的抽象类。

FileInputStream:从文件中读取字节数据的类。

ByteArrayInputStream:从字节数组中读取字节数据的类。

BufferedInputStream:提供缓冲功能的字节输入流类。

DataInputStream:读取基本数据类型的字节输入流类。

try (InputStream is = new FileInputStream("input.txt");BufferedInputStream bis = new BufferedInputStream(is)) {int data;while ((data = bis.read()) != -1) {System.out.print((char) data);}
} catch (IOException e) {e.printStackTrace();
}

字符流类:

Reader:用于从输入源读取字符数据的抽象类。

FileReader:从文件中读取字符数据的类。

BufferedReader:提供缓冲功能的字符输入流类。

InputStreamReader:将字节流转换为字符流的类。

try (Reader reader = new FileReader("input.txt");BufferedReader br = new BufferedReader(reader)) {String line;while ((line = br.readLine()) != null) {System.out.println(line);}
} catch (IOException e) {e.printStackTrace();
}

输入输出流类

OutputStream:用于向输出目标写入字节数据的抽象类。

FileOutputStream:将字节数据写入文件的类。

ByteArrayOutputStream:将字节数据写入字节数组的类。

BufferedOutputStream:提供缓冲功能的字节输出流类。

DataOutputStream:将基本数据类型写入输出流的类。

try (OutputStream os = new FileOutputStream("output.txt");BufferedOutputStream bos = new BufferedOutputStream(os)) {String data = "Hello, World!";bos.write(data.getBytes());
} catch (IOException e) {e.printStackTrace();
}

字符输出流类

Writer:用于向输出目标写入字符数据的抽象类。

FileWriter:将字符数据写入文件的类。

BufferedWriter:提供缓冲功能的字符输出流类。

OutputStreamWriter:将字节流转换为字符流的类。

try (Writer writer = new FileWriter("output.txt");BufferedWriter bw = new BufferedWriter(writer)) {String data = "Hello, World!";bw.write(data);
} catch (IOException e) {e.printStackTrace();
}

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

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

相关文章

【动态规划-BM79 打家劫舍(二)】

题目 BM79 打家劫舍(二) 描述 你是一个经验丰富的小偷,准备偷沿湖的一排房间,每个房间都存有一定的现金,为了防止被发现,你不能偷相邻的两家,即,如果偷了第一家,就不能再偷第二家,如…

Search用法Python:深入探索搜索功能的应用与技巧

Search用法Python:深入探索搜索功能的应用与技巧 在Python编程中,搜索功能是一项至关重要的技能,它能够帮助我们快速定位并处理数据。然而,对于初学者来说,如何高效地使用搜索功能可能会带来一些困惑。本文将从四个方…

全面分析找不到msvcr120.dll,无法继续执行程序问题

在计算机使用过程中,我们可能会遇到一些错误提示,其中“找不到msvcr120.dll”就是常见的一种。那么,找不到msvcr120.dll是什么意思呢? 一,msvcr120.dll文件概述 msvcr120.dll 是 Microsoft Visual C Redistributable …

C++教程(003):运算符

3 运算符 作用:用于执行代码的运算 我们主要讲解以下运算符: 运算符类型作用算术运算符用于处理四则运算赋值运算符用于将表达式的值赋给变量比较运算符用于表达式的比较,并返回一个真值或假值逻辑运算符用于根据表达式的值返回真值或假值 …

详解 Flink 的时间语义和 watermark

一、Flink 时间语义类型 Event Time:是事件创建的时间。它通常由事件中的时间戳描述,例如采集的日志数据中,每一条日志都会记录自己的生成时间,Flink 通过时间戳分配器访问事件时间戳Ingestion Time :是数据进入 Flink…

el-table合计行前置在首行,自定义合计行方法

背景 el-table原生合计行是在标签内增加show-summary属性,在表尾实现设计合计,且只对表格当前页面显示的列数据进行合计。element-UI效果如下图所示。 现要求在首行显示合计行,并自定义合计逻辑实现如下效果。 图示表格中,成本…

【渗透测试】DC-1靶机实战(上)漏洞扫描获取反弹shell

目录 一、范围界定 二、信息收集 三、目标识别 1)主机发现 2)端口扫描 四. 服务枚举 1)网站首页 2)Web指纹识别 3)nikto报告 4)robots.txt 5)UPGRADE.txt 五. 漏洞映射 1&#xff…

万字长文|OpenAI模型规范(全文)

本文是继《OpenAI模型规范概览》之后对OpenAI Model Spec的详细描述,希望能对各位从事大模型及RLHF研究的朋友有帮助。万字长文,建议收藏后阅读。 一、概述 在AI的世界里,确保技术的行为符合我们的期望至关重要。OpenAI最近发布了一份名为Mo…

java里面封装https请求工具类2

其他写法 https://blog.csdn.net/weixin_44372802/article/details/132620809?spm1001.2014.3001.5501 encodeJson 是请求参数的密文格式(大公司都是要对请求参数加密的) ResponseBean 是自己或者对方定义的返回内容参数 public ResponseBean sendByEnc…

今天是放假带娃的一天

端午节放假第一天 早上5点半宝宝就咔咔乱叫了,几乎每天都这个点醒,准时的很,估计他是个勤奋的娃吧,要早起锻炼婴语,哈哈 醒来后做饭、洗锅、洗宝宝的衣服、给他吃D3,喂200ml奶粉、给他洗澡、哄睡&#xff0…

代码随想录算法训练营第二十二天

题目&#xff1a;216. 组合总和 III 这道题和上道题非常类似&#xff0c;大体框架一样只不过修改一下终止条件而已 值得注意的是其中的剪枝条件的设置 一是靠现有的元素和已经大于目标和的话就提前终止&#xff0c;另一个是其中循环那个剪枝可以记住 i < n - (k - path.s…

YOLOv8改进 | 卷积模块 | 在主干网络中添加/替换蛇形卷积Dynamic Snake Convolution

&#x1f4a1;&#x1f4a1;&#x1f4a1;本专栏所有程序均经过测试&#xff0c;可成功执行&#x1f4a1;&#x1f4a1;&#x1f4a1; 蛇形动态卷积是一种新型的卷积操作&#xff0c;旨在提高对细长和弯曲的管状结构的特征提取能力。它通过自适应地调整卷积核的权重&#xff0…

【每日刷题】Day59

【每日刷题】Day59 &#x1f955;个人主页&#xff1a;开敲&#x1f349; &#x1f525;所属专栏&#xff1a;每日刷题&#x1f34d; &#x1f33c;文章目录&#x1f33c; 1. 1103. 分糖果 II - 力扣&#xff08;LeetCode&#xff09; 2. 1051. 高度检查器 - 力扣&#xff08…

电子纸在日化行业的全新应用

电子纸在日化行业的全新应用 项目背景 在一日化龙头企业他们的洗衣粉产线在AGV小车取料到运输到产品包装工序时&#xff0c;因为取料粉车无明显区分标识&#xff0c;但是产品系列有十大类。在未采用晨控电子纸之前现场采用一个转盘分为十个区域&#xff0c;取料工序上方会有一…

Stream与MLC测试CPU内存DDR5的原理与方法详解

在高性能计算和服务器领域&#xff0c;内存性能是决定整体系统性能的关键因素之一&#xff0c;特别是随着DDR5内存的普及&#xff0c;其更高的带宽和更低的延迟特性使得内存性能测试变得更加重要。本文将详细介绍使用Stream和MLC两种工具对CPU内存DDR5进行性能测试的原理和实施…

我也想拥有一个漂亮的网站

我也想拥有一个漂亮的网站 别人的公司几乎每个都有好看的网站&#xff0c;我也想拥有 如今在互联网上网站的存在已经非常的不稀奇了&#xff0c;可以在各大搜索引擎上面查到大量的网站&#xff0c;各行各业的网站都有&#xff0c;千奇百态&#xff0c;什么风格的网站都有…

整理好了!2024年最常见 20 道分布式、微服务面试题(四)

上一篇地址&#xff1a;整理好了&#xff01;2024年最常见 20 道分布式、微服务面试题&#xff08;三&#xff09;-CSDN博客 七、单体应用与微服务架构有何不同&#xff1f; 单体应用&#xff08;Monolithic Application&#xff09;和微服务架构&#xff08;Microservices A…

Transformer 内部原理学习

Transformer 内部原理 想象一下&#xff0c;Transformer 是一个超级智能的团队&#xff0c;每个成员&#xff08;模块&#xff09;都有特定的职责&#xff0c;共同完成一个复杂的任务&#xff0c;比如理解一篇文章或翻译一句话。下面&#xff0c;我们逐步拆解这个团队的工作流…

自动化喷涂生产线方案四

上一篇文章讲了单工作站的自动化喷涂生产线方案&#xff0c;主要是单柜集成的方式&#xff0c;本章介绍在单柜基础上进行扩展&#xff0c;增加一个180kg负载的搬运机械臂&#xff0c;同时配合三台单柜实现多工作站同时喷涂作业的生产线方案。 单工作站可以实现单个机械臂的喷涂…

JDK8安装详细教程教程-windows

&#x1f4d6;JDK8安装详细教程教程-windows ✅1. 下载✅2. 安装 ✅1. 下载 123云盘下载地址&#xff1a; JDK8 | JDK11 | JDK17 官方Oracle地址&#xff1a;https://www.oracle.com/java/technologies/downloads/archive/ ✅2. 安装 运行jdk-8u211-windows-x64.exe安装包文…