IO流的分类

news2024/10/2 2:25:08

1.是什么

        在Java中,IO流主要分为两大类:字节流(Byte Streams)和字符流(Character Streams),每种类型又可以分为输入流和输出流。以下是详细的分类和示例解释:

字节流(Byte Streams)

字节流以字节为单位进行数据的读写,适用于所有类型的文件,特别是二进制文件。

输入字节流(InputStream)
  • FileInputStream:用于从文件系统中的文件读取数据。
  • ByteArrayInputStream:允许将内存中的缓冲区当作InputStream使用。
  • FilterInputStream:是过滤流,可以用来包装其他InputStream,提供额外的功能,如BufferedInputStream
输出字节流(OutputStream)
  • FileOutputStream:用于将数据写入文件系统中的文件。
  • ByteArrayOutputStream:允许将数据写入内存中的缓冲区。
  • FilterOutputStream:是过滤流,可以用来包装其他OutputStream,提供额外的功能,如BufferedOutputStream

字符流(Character Streams)

字符流以字符为单位进行数据的读写,适用于文本文件,考虑了字符编码的问题。

输入字符流(Reader)
  • FileReader:用于从文件系统中的文件读取文本数据。
  • CharArrayReader:允许将字符数组当作Reader使用。
  • BufferedReader:是过滤流,提供缓冲功能,可以按行读取文本。
输出字符流(Writer)
  • FileWriter:用于将文本数据写入文件系统中的文件。
  • CharArrayWriter:允许将字符写入内存中的缓冲区。
  • BufferedWriter:是过滤流,提供缓冲功能,可以按行写入文本。

示例解释

字节流示例
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

public class ByteStreamExample {
    public static void main(String[] args) {
        try (FileInputStream fis = new FileInputStream("input.bin");
             FileOutputStream fos = new FileOutputStream("output.bin")) {
            int byteRead;
            while ((byteRead = fis.read()) != -1) {
                fos.write(byteRead);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

        在这个例子中,我们使用FileInputStream来读取一个二进制文件input.bin,并使用FileOutputStream将读取的字节写入到另一个二进制文件output.bin中。

字符流示例
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

public class CharStreamExample {
    public static void main(String[] args) {
        try (FileReader fr = new FileReader("input.txt");
             FileWriter fw = new FileWriter("output.txt")) {
            int charRead;
            while ((charRead = fr.read()) != -1) {
                fw.write(charRead);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

         在这个例子中,我们使用FileReader来读取一个文本文件input.txt,并使用FileWriter将读取的字符写入到另一个文本文件output.txt中。

总结

  • 字节流适用于处理二进制文件,如图片、音频、视频等。
  • 字符流适用于处理文本文件,如.txt、.csv等。
  • 过滤流(如BufferedInputStreamBufferedReader)提供额外的功能,如缓冲,可以提高IO操作的效率。
  • Java 7 引入了try-with-resources语句,可以自动关闭实现了AutoCloseable接口的资源,从而简化了资源管理。

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

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

相关文章

搭建企业级私有仓库harbor

华子目录 harbor简介实验环境准备下载软件包安装docker-cehosts解析 实验步骤配置https加密传输解压进入解压目录,修改文件配置启动harbor 测试客户端配置harbor本地加速器注意 通过docker compose管理harbor harbor简介 harbor是由wmware公司开源的企业级docker r…

LLM基础概念:Token

什么是token?为什么要限制token的输入?平时说的消耗token数指的是什么? token是用于自然语言处理的词的片段。 在自然语言处理模型中,限制token数量主要是出于计算效率和资源限制的考虑。每一个token都对应一个向量,…

Linux gadget 模拟触控屏 支持多点触控

通过gadget命令行生成hid设备 下面xxx自己根据需要修改,例如VID,PID,产品名称 const char *INSTALL_GADGET_CMDS[] {"modprobe libcomposite","mkdir /sys/kernel/config/usb_gadget/g1","echo xxx > /sys/kernel/config/…

github项目--crawl4ai

github项目--crawl4ai 输出html输出markdown格式输出结构化数据与BeautifulSoup的对比 crawl4ai github上这个项目,没记错的话,昨天涨了3000多的star,今天又新增2000star。一款抓取和解析工具,简单写个demo感受下 这里我们使用cra…

衡水中学资料大全-重构版(状元、学霸笔记)

文章目录 一、衡水中学:教育界的璀璨明珠二、状元笔记:学霸的智慧传承三、学霸笔记:高效学习的秘籍四、全面复习资料:覆盖所有考点五、思维导图:构建知识框架六、获取方式 一、衡水中学:教育界的璀璨明珠 …

【React】入门Day01 —— 从基础概念到实战应用

目录 一、React 概述 二、开发环境创建 三、JSX 基础 四、React 的事件绑定 五、React 组件基础使用 六、组件状态管理 - useState 七、组件的基础样式处理 快速入门 – React 中文文档 一、React 概述 React 是什么 由 Meta 公司开发,是用于构建 Web 和原生…

语音转文字免费利器:助力高效办公与学习

语音转文字免费的软件如同一股清流,让我们能够更轻松地将语音信息转化为可编辑的文字内容。今天我们一起来分析它们的功能、特点以及如何为我们的生活和工作带来便利。 1.365在线转文字 链接直达:https://www.pdf365.cn/ 这是一个功能强大的在线工具…

网站集群批量管理-密钥认证与Ansible模块

一、集群批量管理-密钥认证 1、概述 管理更加轻松:两个节点,通过密钥形式进行访问,不需要输入密码,仅支持单向. 服务要求(应用场景): 一些服务在使用前要求我们做秘钥认证.手动写批量管理脚本. 名字: 密钥认证,免密码登录,双机互信. 2、原理 税钥对…

MySQL 的复制延迟:理解与解决方案

一、什么是 MySQL 的复制延迟? 在 MySQL 数据库中,复制是一种将数据从一个数据库服务器(主服务器)复制到一个或多个数据库服务器(从服务器)的机制。复制延迟指的是主服务器上的数据更改与这些更改在从服务…

DBeaver显示PostgreSQL数据库的信息模式

DBeaver连接PostgreSQL数据库后,默认情况下是不加载信息模式的,如果有需要,我们可以通过设置显示信息模式。 具体步骤:点击数据库连接–>右键打开设置–>连接设置–>常规–>导航视图–>自定义–>勾选显示系统对…

Python 基于 flask 的前程无忧招聘可视化系统,Python大数据招聘爬虫可视化分析

博主介绍:✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专栏推荐订阅👇…

springboot的调度服务与异步服务实操

1.调度服务 1.1.JDK之ScheduledExecutorService 讲到调度任务,我们脑海里马上会想到ScheduledExecutorService。 ScheduledExecutorService是 Java java.util.concurrent 包中的一个接口,它继承自 ExecutorService 接口。它主要用于在给定的延迟后运行…

计算机毕业设计Python+Spark知识图谱微博舆情预测 微博推荐系统 微博可视化 微博数据分析 微博大数据 微博爬虫 Hadoop 大数据毕业设计

《PythonSpark知识图谱微博舆情预测》开题报告 一、课题背景与意义 随着互联网技术的飞速发展,社交媒体平台如微博已成为人们表达观点、交流信息的重要渠道。微博每天产生海量的数据,这些数据中蕴含着丰富的社会情绪、事件动态等信息,对于政…

从概念到使用全面了解Llama 3 这个迄今为止最强大的开源模型

概述 mate最近发布了 Llama3,下一代最先进的开源大语言模型(LLM)。正如本文的综合评论所述,Llama 3 以其前身奠定的基础为基础,旨在增强 Llama 2 成为 ChatGPT 重要开源竞争对手的能力 Llama 2:深入探讨 C…

【更新】红色文化之红色博物馆数据集(经纬度+地址)

数据简介:红色博物馆作为国家红色文化传承与爱国主义教育的重要基地,遍布全国各地,承载着丰富的革命历史与文化记忆。本数据说明旨在汇总并分析全国范围内具有代表性的红色博物馆的基本信息,包括其地址、特色及教育意义&#xff0…

Scrapy框架入门

一、Scrapy简介 Scrapy是一款快速而强大的web爬虫框架,基于Twisted的异步处理框架、Twisted是事件驱动的。 Scrapy是由python实现的爬虫框架:架构清晰、可扩展性强、可以灵活完成需求。 一、Scrapy应用 scrapy及其他模块的安装 pip3 install scrapy…

【Java编程系列】使用java接入Microsoft Graph,实现发送邮件功能

1、前言 微软与2022年10月1号,开始停止了部分服务的 basic auth (账密登录)功能,需要改用 oauth2.0 协议接入相应服务。邮件方面主要在于IMAP和pop协议。并且与2023年1月1日时,正式全面停止账密登录使用去接入上述服务…

【Python报错已解决】[notice] A new release of pip available: 22.2 -> 22.2.2

🎬 鸽芷咕:个人主页 🔥 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想,就是为了理想的生活! 专栏介绍 在软件开发和日常使用中,BUG是不可避免的。本专栏致力于为广大开发者和技术爱好者提供一个关于BUG解决的经…

共享单车轨迹数据分析:以厦门市共享单车数据为例(九)

副标题:基于站点800m范围内评价指标探究——以吕厝站为例 上篇文章我们以厦门市为例,来通过POI和优劣解距离法(TOPSIS)来研究厦门岛内以800m作为辐射范围的地铁站哪些地铁站发展的最好,根据综合得分指数可以知道&…

架构设计笔记-5-软件工程基础知识-2

知识要点 构件组装是将库中的构件经适当修改后相互连接,或者将它们与当前开发项目中的软件元素连接,最终构成新的目标软件。 构件组装技术大体可分为: 1. 基于功能的组装技术:基于功能的组装技术采用子程序调用和参数传递的方式将构件组装起来。它要求库中的构件以子程序…