Java 中有哪些类型的流?

2023-11-09

Java 中的流(Stream)分为两种类型:字节流和字符流。

  1. 字节流(Byte Stream)

字节流可以处理任何类型的数据,但是它们是以字节为单位进行操作的。Java 中提供了两种字节流:InputStream 和 OutputStream。

InputStream 是字节输入流,用于从数据源读取数据。InputStream 的常用子类包括:

  • FileInputStream:用于从文件中读取数据。
  • ByteArrayInputStream:用于从字节数组中读取数据。
  • PipedInputStream:用于从管道中读取数据。

OutputStream 是字节输出流,用于将数据写入到目标位置。OutputStream 的常用子类包括:

  • FileOutputStream:用于将数据写入文件。
  • ByteArrayOutputStream:用于将数据写入字节数组。
  • PipedOutputStream:用于将数据写入管道。
  1. 字符流(Character Stream)

字符流用于处理字符数据,它们是以字符为单位进行操作的。Java 中提供了两种字符流:Reader 和 Writer。

Reader 是字符输入流,用于从数据源读取字符。Reader 的常用子类包括:

  • FileReader:用于从文件中读取字符。
  • CharArrayReader:用于从字符数组中读取字符。
  • StringReader:用于从字符串中读取字符。

Writer 是字符输出流,用于将字符写入到目标位置。Writer 的常用子类包括:

  • FileWriter:用于将字符写入到文件。
  • CharArrayWriter:用于将字符写入到字符数组中。
  • StringWriter:用于将字符写入到字符串中。

Java 中的流可以按照流的作用分为不同的类型,包括:

  • 节点流(Node Stream):直接从数据源读取或写入数据的流。
  • 处理流(Filter Stream):在节点流的基础上增加了一些功能的流。例如,BufferedInputStream 可以使用缓存机制提高读取效率。
  • 对象流(Object Stream):可以读取或写入 Java 对象的流。例如,ObjectInputStream 和 ObjectOutputStream。

在使用流时,应该遵循以下原则:

  • 打开流:创建一个输入流或输出流的对象。
  • 读写数据:使用流读取或写入数据。
  • 关闭流:使用完流后,应该关闭流以释放资源。通常使用 try-with-resources 语句块来自动关闭流。
  1. 缓冲流(Buffered Stream)

缓冲流是处理流的一种,它使用缓存机制来提高 I/O 操作的效率。Java 中提供了两种缓冲流:BufferedInputStream 和 BufferedOutputStream。

BufferedInputStream 继承自 FilterInputStream,用于从输入流中读取数据并提供缓冲功能。BufferedOutputStream 继承自 FilterOutputStream,用于将数据写入到输出流中并提供缓冲功能。

在使用缓冲流时,应该遵循以下原则:

  • 打开流:创建一个输入流或输出流的对象。
  • 创建缓冲流:将输入流或输出流传递给 BufferedInputStream 或 BufferedOutputStream 的构造函数。
  • 读写数据:使用缓冲流读取或写入数据。
  • 关闭流:使用完缓冲流后,应该关闭缓冲流以释放资源。关闭缓冲流时,缓冲流会自动刷新缓存区。
  1. 转换流(InputStreamReader 和 OutputStreamWriter)

转换流是字符流和字节流之间的桥梁,它可以将字节流转换为字符流,也可以将字符流转换为字节流。Java 中提供了两种转换流:InputStreamReader 和 OutputStreamWriter。

InputStreamReader 将字节流转换为字符流,OutputStreamWriter 将字符流转换为字节流。转换流使用指定的字符集将字节流中的字节解码为字符,或将字符编码为指定的字节序列。

在使用转换流时,应该遵循以下原则:

  • 打开流:创建一个输入流或输出流的对象。
  • 创建转换流:将输入流或输出流传递给 InputStreamReader 或 OutputStreamWriter 的构造函数。需要指定字符集。
  • 读写数据:使用转换流读取或写入数据。
  • 关闭流:使用完转换流后,应该关闭转换流以释放资源。关闭转换流时,转换流会自动关闭底层的字节流或字符流。
  1. 对象流(Object Stream)

对象流可以读取或写入 Java 对象,包括基本数据类型和引用类型。Java 中提供了两种对象流:ObjectInputStream 和 ObjectOutputStream。

ObjectInputStream 从输入流中读取对象,ObjectOutputStream 将对象写入到输出流中。对象流需要将对象序列化和反序列化为字节序列。

在使用对象流时,应该遵循以下原则:

  • 打开流:创建一个输入流或输出流的对象。
  • 创建对象流:将输入流或输出流传递给 ObjectInputStream 或 ObjectOutputStream 的构造函数。
  • 读写对象:使用对象流读取或写入对象。
  • 关闭流:使用完对象流后,应该关闭对象流以释放资源。关闭对象流时,对象流会自动关闭底层的字节流或字符流。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java 中有哪些类型的流? 的相关文章

  • 如何使用Spring WebClient进行同步调用?

    Spring Framework in 休息模板 https docs spring io spring framework docs current javadoc api org springframework web client R
  • NoInitialContextException:heroku 战争部署

    我一直在开发一个 J2EE 项目 并且在其中使用连接池 也通过部署在 heroku 上的数据库进行访问 我使用以下代码来设置 Connection 对象 Context initContext new InitialContext Cont
  • “java.io.IOException:连接超时”和“SocketTimeoutException:读取超时”之间有什么区别

    如果我设置一个套接字 SoTimeout 并从中读取 当读取时间超过超时限制时 我会收到 SocketTimeoutException 读取超时 这是我的例子中的堆栈 java net SocketTimeoutException Read
  • Android 中的列表(特别是 RecyclerView 和 CardView)如何工作

    请原谅我问这个问题 但我是 Android 开发新手 尽管我正在尝试了解developer android com 网站上的基础知识 但大多数示例 即使他们说它们是为 Android Studio 构建的 尚未设置为使用 Gradle 因此
  • 当路径的点超出视野时,Android Canvas 不会绘制路径

    我在绘制路径时遇到了 Android Canvas 的一些问题 我的情况是 我有一个相对布局工作 如地图视图 不使用 google api 或类似的东西 我必须在该视图上绘制一条路径 canvas drawPath polyPath bor
  • 在 Struts 2 中传递 URL 参数而不使用查询字符串

    我想使用类似的 URL host ActionName 123 abc 而不是像这样传递查询字符串 host ActionName parm1 123 parm2 abc 我怎样才能在 Struts 2 中做到这一点 我按照下面的方法做了
  • tomcat 7.0.50 java websocket 实现给出 404 错误

    我正在尝试使用 Java Websocket API 1 0 JSR 356 中指定的带注释端点在 tomcat 7 0 50 上实现 websocket 以下是我如何对其进行编码的简要步骤 1 使用 ServerEndpoint注解编写w
  • 如何在java Spring Boot中实现通用服务类?

    我有许多具有重复代码的服务 我想知道如何实现通用服务 以便我的所有服务都可以扩展它 服务接口示例 重复代码 Service public interface IUserService List
  • 如何检测图像是否像素化

    之前有人在 SO 上提出过这样的问题 在Python中检测像素化图像 https stackoverflow com questions 12942365 detecting a pixelated image in python还有关于q
  • Java:从集合中获取第一项

    如果我有一个集合 例如Collection
  • 从直方图计算平均值和百分位数?

    我编写了一个计时器 可以测量任何多线程应用程序中特定代码的性能 在下面的计时器中 它还会在地图中填充花费了 x 毫秒的调用次数 我将使用这张图作为我的直方图的一部分来进行进一步的分析 例如调用花费了这么多毫秒的百分比等等 public st
  • 当 minifyEnabled 为 true 时 Android 应用程序崩溃

    我正在使用多模块应用程序 并且该应用程序崩溃时minifyEnabled true in the installed模块的build gradle 以下是从游戏控制台检索到的反混淆堆栈跟踪 FATAL EXCEPTION Controlle
  • Eclipse - 安装新的 JRE (Java SE 8 1.8.0)

    我正在尝试安装 Java 8 到目前为止我所做的 安装最新版本的 Eclipse 下载并安装 Java SE 运行时环境 8http www oracle com technetwork java javase downloads jre8
  • JAVA中遍历JSON数据

    我是 JSON 新手 我使用 HTTPUrlConnections 并在 JAVA 程序中获得一些响应 响应数据将类似于 data id 1 userId 1 name ABC modified 2014 12 04 created 201
  • 使用Java绘制维恩图

    我正在尝试根据给定的布尔方程绘制维恩图 例如 a AND b AND c我想在 Android 手机上执行此操作 因此我需要找到一种使用 Java 来执行此操作的方法 我找到了一个完美的小部件 它可以完成我在这方面寻找的一切布尔代数计算器
  • 禁用 Android 菜单组

    我尝试使用以下代码禁用菜单组 但它不起作用 菜单项仍然启用 你能告诉我出了什么问题吗 资源 菜单 menu xml menu menu
  • 如何处理 StaleElementReferenceException

    我正在为鼠标悬停工作 我想通过使用 for 循环单击每个链接来测试所有链接的工作条件 在我的程序中 迭代进行一次 而对于下一次迭代 它不起作用并显示 StaleElementReferenceException 如果需要 请修改代码 pub
  • Hadoop NoSuchMethodError apache.commons.cli

    我在用着hadoop 2 7 2我用 IntelliJ 做了一个 MapReduce 工作 在我的工作中 我正在使用apache commons cli 1 3 1我把库放在罐子里 当我在 Hadoop 集群上使用 MapReduceJob
  • 使用 JFreeChart 为两个系列设置不同的 y 轴

    我正在使用 JFreeChart 使用折线图绘制两个数据系列 XYSeries 复杂的因素是 其中一个数据系列的 y 值通常远高于第二个数据系列的 y 值 假设第一个系列的 y 值约为数百万数量级 而第二个数据系列的 y 值约为数百万数量级
  • 将对象从手机共享到 Android Wear

    我创建了一个应用程序 在此应用程序中 您拥有包含 2 个字符串 姓名和年龄 和一个位图 头像 的对象 所有内容都保存到 sqlite 数据库中 现在我希望可以在我的智能手表上访问这些对象 所以我想实现的是你可以去启动 启动应用程序并向左和向

随机推荐

  • Qt 疑云解答

    一 qt的mianwindow处不能布局 我们在mainwindow中添加2个控件 pushButton和pushButton 2 QWidget centerWindow new QWidget this this is point to
  • Hashmap扩容方法机制原理

    Hashmap扩容方法 机制原理 1 7版本 数组额定容量为16 元素数量超过负载因子 一般为0 75 后会扩容至原有数组大小 2 遍历老数组每个位置上的链表每个元素 取每个元素的key根据链表长度计算出在新数组中的下表 将元素添加到新数组
  • SylixOS下Redis编程实践

    1 Redis简介 Redis是一个完全开源的key value型数据库 其显著特点是基于内存操作 但是可以持久化到磁盘 相比较其他的数据库 Redis有着明显的优势 响应速度快和特性丰富是其明显的特点 其他的特点这里不一一赘述 Redis
  • pytorch 的 dataset 中使用 onnxruntime

    如果在 dataset 中预处理图像时 用到了 onnxruntime 的 cudaep 出现这样的错误 1 2022 12 13 13 53 01 554864883 E onnxruntime Default cuda call cc
  • Vuepress 导航栏与侧边栏配置详解

    目录 一 目录结构 二 导航栏配置 三 侧边栏配置 四 效果图 图 1 图 2 图 3 图 4 一 目录结构 这是我创建的 vuepress 站点 可参考 https blog csdn net sinat 31213021 article
  • windows下如何安装git以及IDEA如何配置git

    一 安装git git官方下载地址Git Downloads 目前最新的版本是2 15 0 1 1 首先 双击安装包 打开安装界面 然后点击Next下一步 1 2 配置git的安装组件 默认就行 继续点击Next下一步 默认勾选的内容有 创
  • http实现文件分片下载

    文章目录 检测是否支持 HTTP Range 语法 Range请求cURL示例 单一范围 多重范围 条件式分片请求 Range分片请求的响应 文件整体下载 文件分片下载 文本下载 图片下载 封装下载方法 HTTP分片异步下载是一种下载文件的
  • GBDT&GBRT与XGBoost

    在看清华学霸版 Python大战机器学习 的过程中 集成学习章节中出现了两个新的名词 GBDT GBRT 也许是西瓜书定位于全面 而没有拘泥于细节 后来科普发现 这两个东西和陈天奇大神的XGBoost紧密相连 于是估摸着花时间弄懂这两个东西
  • 【算法日志】动态规划刷题:股票买卖附加问题(day42)

    代码随想录刷题60Day 目录 前言 含冷冻期的股票买卖最佳时期 含手续费的股票买卖最佳时期 前言 今天的股票买卖问题会附加一些条件 但总体难度不大 含冷冻期的股票买卖最佳时期 该问题难点在于对几个状态进行解构并写出相应的状态转移方程 in
  • 安卓各文件存储路径汇总(Android file path)

    写下来 省得以后不记得到处翻 Environment getDataDirectory data Environment getDownloadCacheDirectory cache Environment getExternalStor
  • 2017 ICM/MCM Problem E: Sustainable Cities Needed!

    题目理解可持续发展的城市 任务 References 题目理解 可持续发展的城市 许多社区正在实施智能增长计划 以考虑长期 可持续的规划目标 聪明的成长是关于帮助每个城镇和城市变成更加经济繁荣 社会公平和环境可持续的生活地方的意思 2 智能
  • STM32使用HAL库输出连续可调的PWM信号

    项目中要控制一个步进电机控制器 因为涉及到加减速过程 需要频率任意可变 总体思路是先初始化PWM定时器输出 之后直接修改ARR和PSC寄存器 初始化代码如下 函 数 名 bsp SetTIMOutPWM 功能说明 设置引脚输出的PWM信号的
  • PHP正则采集示例 sscanf

    sscanf从一个格式化字符串中读取输入 功能跟正则类似 输出结果 Age 25 Name John Gender male 正则三段论 定
  • Mycat+Mysql分布式架构改造和性能压力测试

    架构实现 Mycat作为数据库高可用中间件具备很多的功能 如负载均衡 分库分表 读写分离 故障迁移等 结合项目的实际情况 分库分表功能对于关联查询有很高的要求 需要从业务角度考虑分库分表后的关联查询SQL的分析 业务代码动作较大 所以在此方
  • 记一次线上fullgc排查历程

    在公司一次重大项目中 生产环境突然发生频繁fullgc问题 通过cat发出警告 很不幸 这次项目非常重要 领导很看重 所以得赶紧解决问题 下面就是排查的艰苦历程 22 10 线上可以报警 出现fullgc问题 初步判断是服务器少了 于是申请
  • 2023最新版IntelliJ IDEA安装教程(非常详细)从零基础入门到精通,看完这一篇就够了

    IDEA的使用 IDEA的简单介绍 IDEA的主要优势 IDEA的卸载 IDEA的安装 第一个程序 HelloWorld 结束语 IDEA的简单介绍 IDEA全称IntelliJ IDEA 是Java语言对的集成开发环境 IDEA在业界被认
  • ajax无法获取null,Ajax未捕获TypeError:无法读取属性'点击'null

    我无法找出错误的原因 我不断收到Uncaught TypeError Cannot read property click of null错误 我确实在按钮中定义了 product btn类 Ajax未捕获TypeError 无法读取属性
  • 甲骨文 CleanCache 将从 Linux 内核中清除;GNU Parallel 20 周年;Openfire 4.6.7 发布

    整理 宋彤彤 责编 屠敏 开源吞噬世界的趋势下 借助开源软件 基于开源协议 任何人都可以得到项目的源代码 加以学习 修改 甚至是重新分发 关注 开源日报 一文速览国内外今日的开源大事件吧 一分钟速览新闻点 甲骨文研发的 CleanCache
  • java 常见的异常错误代码

    java异常错误代码 1 应当谨慎地使用那些只有HTTP1 1支持的状态代码 因为许多浏览器还只能够支持HTTP1 0 如果你使用了 HTTP1 1特有的状态代码 最好能够检查一下请求的HTTP版本号 状态代码 状态信息 含义 2 100错
  • Java 中有哪些类型的流?

    Java 中的流 Stream 分为两种类型 字节流和字符流 字节流 Byte Stream 字节流可以处理任何类型的数据 但是它们是以字节为单位进行操作的 Java 中提供了两种字节流 InputStream 和 OutputStream