转换流|学习笔记

简介: 快速学习转换流

开发者学堂课程【Java 高级编程转换流】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址https://developer.aliyun.com/learning/course/20/detail/315


转换流


一、转换流

所谓的转换流指的是可以实现字节流与字符流操作的功能转换

例如:进行输出的时候,output stream 需要将内容变为字节数组后才可以输出,而 Writer 可以直接输出字符串,这一点是方便的,所以很多人就认为需要提供有一种转换的机制来实现不同流类型的转换操作

为此在 java.io 包里面提供有两个类:

InputStreamReader、OutputStreanmwriter。

以下为两个类的结构操作方式。

 

在代码中找到类 Output stream writer和input stream reader,将其打开。

出现以下界面

Pubilic class OutputStream Writer

Extends Writer

Public class InputStreamReader

Extends Reader

 

以上为 output stream writer和input stream reader 的定义。

public OutputStreamWriter(OutputStream out)

public InputStreamReader(InputStream in)

以上为 output stream writer 和 input stream reader 的构造方法。

 

以下为转换流

图片85.png

Writer 中有一个子类 output stream writer,和 writer 是同一个时期出来的。

Reader 中子类是 input stream reader。Writer 在整个设计过程中和 output stream 产生关系,Reader 若 input stream 产生关系。

接收字节流对象利用向上转换变成字符流对象。

 

转换的本质在于对象的转型和构造方法的接收。通过类的继承结构与构造方法,可以发现所谓的转换处理就是将接收到的字节流对象通过向上转流型变为字符流对象。

 

范例:观察转换

代码如下

图片86.png

在整体代码中,file output stream 和 File 位有关。

 

程序在此,output 只能操作字节。如果加入字节流变为字符流的代码,可直接输出字符串。字符流适合处理中文。

 

此转换在是中文的情况下,处理较为方便,在不是中文的情况下,处理不够方便。

但讲解转换流的主要目的基本上不是为了让开发者去记住它,而是知道有这样一种功能,但同时更多的是需要进行结构的分析处理。

 

通过之前的字节流和字符流的一系列分析之后,你会发现 output stream 类有 fire  output stream,直接子类 input stream 类有 File input stream 直接子类,但是观察 file writer,file reader 类的继承关系。

 

打开 file reader 和 file writer,观察其继承结构。

public class FileWriter

extends OutputStreamWriter

 

 

打开 file writer,发现 output stream writer,打开 file reader,发现 input stream reader。

证明之前的操作一直存在转换流这一概念。

在类结构定义时,已经准确的描述出转换流程。图片87.png

在整体代码中,file output stream 和 File 位有关。

 

程序在此,output 只能操作字节。如果加入字节流变为字符流的代码,可直接输出字符串。字符流适合处理中文。

 

此转换在是中文的情况下,处理较为方便,在不是中文的情况下,处理不够方便。

但讲解转换流的主要目的基本上不是为了让开发者去记住它,而是知道有这样一种功能,但同时更多的是需要进行结构的分析处理。

 

通过之前的字节流和字符流的一系列分析之后,你会发现 output stream 类有 fire output stream,直接子类 input stream 类有 File input stream 直接子类,但是观察 file writer,file reader 类的继承关系。

 

打开 file reader 和 file writer,观察其继承结构。

public class FileWriter

extends OutputStreamWriter

 

 

打开 file writer,发现 output stream writer,打开 file reader,发现 input stream reader。

证明之前的操作一直存在转换流这一概念。

在类结构定义时,已经准确的描述出转换流程。

图片88.png正常情况下进行文件读取,需要以下流程。

图片89.png

而缓存就是如果用字节流读取,并不表示整个过程中没有内存。在严格意义上来讲,内存将一直存在。

 

只要程序需要读取数据,那么内存就会一直存在。如果用字节流读取,流程如下。

图片90.png

如果用字符流读取,还是向 cpu 请求。但是当读数据的时候,会准备缓冲区。适合传输的数据都是字节数据。

Cpu 请求到的数据是字节数据,而整个流程中磁盘传的是字节数据,而有了缓存之后相当于所有的数据已经经过处理。

意味着这些数据要读取到缓存区之中,读取到缓存区中直接过程就在于会对数据进行先期处理。在处理过程中就极为方便处理中文数据。

在电脑中,文件都是二进制数据的集合,缓冲区会进行处理。转换流的处理在定义结构上更加清楚描述出所有读取到的字节数据,并要求进行转换处理。

这就是转换流存在的意义所在

相关文章
|
存储 机器学习/深度学习 分布式计算
大数据技术——解锁数据的力量,引领未来趋势
【10月更文挑战第5天】大数据技术——解锁数据的力量,引领未来趋势
|
Web App开发 存储 网络协议
chrome命令行参数
chrome命令行参数
437 0
|
Linux 数据库 网络协议
Linux环境下安装和配置Informix数据库(多次试错后总结)
本文主要讲解在Centos环境下,Informix数据库的安装和配置方法
3533 0
Linux环境下安装和配置Informix数据库(多次试错后总结)
|
8月前
|
编解码 人工智能 文字识别
5款知名度不高,但很好用的软件
本文推荐了5款小众但实用的软件工具:MouseInc可通过手势操作提升效率;TagSpaces以标签化管理文件,打破传统目录结构;燃精灵可检测微信空号,助力精准营销;GIMP作为开源图像编辑器,功能媲美Photoshop;File Converter支持200+格式互转,满足多种文件处理需求。这些工具虽知名度不高,却各具特色,值得尝试。
231 10
|
12月前
|
存储 负载均衡 监控
揭秘 Elasticsearch 集群架构,解锁大数据处理神器
Elasticsearch 是一个强大的分布式搜索和分析引擎,广泛应用于大数据处理、实时搜索和分析。本文深入探讨了 Elasticsearch 集群的架构和特性,包括高可用性和负载均衡,以及主节点、数据节点、协调节点和 Ingest 节点的角色和功能。
510 0
|
监控 安全 架构师
超越流水线,企业研发规范落地新思路
一文详解研发规范的目标、常见误区、选型方法与常见最佳实践。
16493 21
|
关系型数据库 PostgreSQL
【一文搞懂PGSQL】5. 流复制
PostgreSQL流复制架构支持多种常见配置,包括基本的主从复制、结合PGPool-II的读写分离以及使用repmgr实现高可用性。基础环境中,主节点与备用节点分别位于不同IP。配置涵盖创建复制用户、调整核心参数以支持流复制,并确保归档与日志功能正常工作。从节点需通过备份恢复并配置为待机模式,以实现数据同步。此外,还介绍了如何验证复制状态及手动切换主从节点的方法,以及同步复制参数的配置细节。
|
存储 弹性计算 前端开发
阿里云服务领域Agent智能体:从概念到落地的思考、设计与实践
本文讲述了作者团队在阿里云的服务领域Agent是如何设计与实践的,以及到目前为止的一些阶段性成果,作者做出了总结和整理。
|
存储 分布式计算 负载均衡
什么是 HBase?其组件起什么作用?
【8月更文挑战第12天】
1784 4
|
机器学习/深度学习 算法 数据可视化
Fisher模型在统计学和机器学习领域通常指的是Fisher线性判别分析(Fisher's Linear Discriminant Analysis,简称LDA)
Fisher模型在统计学和机器学习领域通常指的是Fisher线性判别分析(Fisher's Linear Discriminant Analysis,简称LDA)

热门文章

最新文章