14.其他流(下篇)

  • 目录

    1. IO流的体系结构

    2.字节缓冲流

    3.字符缓冲流

    4.转换流

    5.序列化

    6.打印流

    7.压缩流与解压流

    8.工具包


  • 1. IO流的体系结构

    • IO流的使用原则:随用随创建,什么时候不用什么时候关闭
    • 1.1 io流的体系结构图

    • 1.2缓冲流的分类
      缓冲流,也叫高效流,是对4个基本的FileXxx流的增强
      • 字节缓冲流:BufferedInputStream,BufferedOutputStream
      • 字符缓冲流:BufferedReader,BufferedWriter
      • 缓冲流的基本原理:在创建流对象时,会创建一个内置的默认长度为8192字节/字符的缓冲区数组,通过缓冲区读写,减少系统IO次数,从而提高读写的效率
  • 2.字节缓冲流

    • 2.1构造方法
      • public BufferedInputStream(InputStream in)
        创建一个 新的缓冲输入流。
      • public BufferedOutputStream(OutputStream out)
        创建一个新的缓冲输出流。
    • 2.2注意:只需要关闭缓冲流即可,基本流的关闭已经被包装好了
  • 3.字符缓冲流

    • 3.1构造方法
      • public BufferedReader(Reader in)
        创建一个 新的缓冲输入流
      • public BufferedWriter(Writer out)
        创建一个新的缓冲输出流
    • 3.2特有方法
      • BufferedReader:public String readLine()
        读一行文字,如果没有数据返回Null
      • BufferedWriter:public void newLine()
        写一行行分隔符,由系统属性定义符号。 (跨平台的换行)
  • 4.转换流

    • 4.1字符编码和字符集
    • 4.2转换流的作用
      • 指定字符集读取数据(JDK11之后被淘汰)
        代替的构造方法:
        FileReader(String fileName,Charset BM)
        FileWriter(String fileName,Charset BM)
        注意:Charset是一个类,可以调用此类中的Charset.forName(String BM)
      • 字节流想要使用字符流中的方法
    • 4.3InputStreamReader类
      • 介绍:
        • 转换流java.io.InputStreamReader,是Reader的子类,是从字节流到字符流的桥梁。它读取字节,并使用指定的字符集将其解码为字符。它的字符集可以由名称指定,也可以接受平台的默认字符集。
      • 构造方法:
        • InputStreamReader(InputStream in)
          创建一个使用默认字符集的字符流
        • InputStreamReader(InputStream in, String charsetName)
          创建一个指定字符集的字符流
    • 4.4OutputStreamWriter类
      • 介绍:
        • 转换流java.io.OutputStreamWriter ,是Writer的子类,是从字符流到字节流的桥梁。使用指定的字符集将字符编码为字节。它的字符集可以由名称指定,也可以接受平台的默认字符集。
      • 构造方法:
        • OutputStreamWriter(OutputStream in)
          创建一个使用默认字符集的字符流
        • OutputStreamWriter(OutputStream in, String charsetName)
          创建一个指定字符集的字符流
    • 4.5转换流理解图解
      • 转换流是字节与字符间的桥梁

  • 5.序列化

    • 5.1概述
      • Java 提供了一种对象**序列化**的机制。用一个字节序列可以表示一个对象,该字节序列包含该`对象的数据`、`对象的类型`和`对象中存储的属性`等信息。字节序列写出到文件之后,相当于文件中**持久保存**了一个对象的信息。
      • 反之,该字节序列还可以从文件中读取回来,重构对象,对它进行**反序列化**。`对象的数据`、`对象的类型`和`对象中存储的数据`信息,都可以用来在内存中创建对象。
      • 图解

    • 5.2ObjectOutputStream类
      java.io.ObjectOutputStream 类,将Java对象的原始数据类型写出到文件,实现对象的持久存储。
      • 构造方法:public ObjectOutputStream(OutputStream out)
        创建一个指定OutputStream的ObjectOutputStream
      • 写出对象方法:public final void writeObject (Object obj)
        将指定的对象写出
      • 序列化操作条件
        • 该类必须实现java.io.Serializable 接口,Serializable 是一个标记接口,不实现此接口的类将不会使任何状态序列化或反序列化,会抛出NotSerializableException 。
        • 该类的所有属性必须是可序列化的。如果有一个属性不需要可序列化的,则该属性必须注明是瞬态的,使用transient 关键字修饰。
    • 5.3ObjectInputStream类
      ObjectInputStream反序列化流,将之前使用ObjectOutputStream序列化的原始数据恢复为对象。
      • 构造方法:public ObjectInputStream(InputStream in)
        创建一个指定InputStream的ObjectInputStream
      • 读取对象方法:public final Object readObject ()
        读取一个对象
      • 注意:对于JVM可以反序列化对象,它必须是能够找到class文件的类。如果找不到该类的class文件,则抛出一个 ClassNotFoundException 异常
      • 注意:Serializable 接口给需要序列化的类,提供了一个序列版本号。serialVersionUID 该版本号的目的在于验证序列化的对象和对应类是否版本匹配。
        private static final long serialVersionUID = 1L;
    • 5.4细节汇总
      • 1. 需要让JavaBean类实现Serialzable接口
      • 2. 文件中的序列化数据修改后无法再次读取
      • 3. 修改JavaBean后,再次反序列化会抛出InvalidClassException异常,解决方案:添加序列号
      • 4. 给成员变量添加transient关键字修饰,该关键字标记的成员变量不参与序列化过程。
      • 5. 当不确定有多少对象需要序列化,使用集合,将集合序列化。
  • 6.打印流

    • 平时我们在控制台打印输出,是调用print方法和println方法完成的,这两个方法都来自于java.io.PrintStream类,该类能够方便地打印各种数据类型的值,是一种便捷的输出方式。
    • 6.1分类

      • 字节打印流:PrintStream
      • 字符打印流:PrintWriter
    • 6.2特点
      • 打印流只操作文件目的地,不操作数据源
      • 特有的写出方法可以实现数据原样写出
      • 特有的写出方法,可以实现自动刷新,自动换行
    • 6.3字节打印流
      • 构造方法

      • 成员方法

    • 6.4字符打印流
      • 构造方法

      • 成员方法

    • 6.5改变打印流的流向
      • 打印流的流向

  • 7.压缩流与解压流

    • 压缩流与解压流代码
  • 8.工具包

    • Commons与hutool

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

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

相关文章

Redhat 7,8系(复刻系列) 一键部署Oracle21c-xe rpm

Oracle21c-xe前言 无论您是开发人员、DBA、数据科学家、教育工作者,还是仅仅对数据库感兴趣,Oracle Database Express Edition (XE) 都是理想的入门方式。它是全球企业可依赖的强大的 Oracle Database,提供简单的下载、易于使用和功能齐全的体验。您可以在任何环境中使用该…

买家希望信任内容,但他们看重你的内容吗?[新研究]

B2B 技术买家希望获取可信的内容。他们还需要在内容中找到价值。 根据 Informa Tech 的一份 最新研究报告(需注册),许多人发现这种组合难以捉摸。 B2B 营销人员如何填补信任差距,以便买家能够更多地参与、采取更多行动&#xff…

【Python篇】NumPy完整指南(上篇):掌握数组、矩阵与高效计算的核心技巧

文章目录 Python NumPy学习指南第一部分:NumPy简介与安装1. 什么是NumPy?2. 安装NumPy使用pip安装:使用Anaconda安装: 第二部分:NumPy数组基础1. NumPy数组的创建从列表创建一维数组:创建多维数组&#xff…

Java语言程序设计基础篇_编程练习题*18.28 (非递归目录大小)

目录 题目:*18.28 (非递归目录大小) 习题思路 代码示例 输出结果 题目:*18.28 (非递归目录大小) 不使用递归改写程序清单18-7 习题思路 ( getSize方法) 创建一个变量表示总共的大小。传入路径,创建File文件。创建A…

生成式人工智能在无人机群中的应用、挑战和机遇

人工智能咨询培训老师叶梓 转载标明出处 无人机群在执行人类难以或危险任务方面有巨大潜力,但在复杂动态环境中学习和协调大量无人机的移动和行动,对传统AI方法来说是重大挑战。生成式人工智能(Generative AI, GAI),凭…

IPPBX概述

IP PBX涵义 IP PBX是一种电信设备,IP PBX是一种专用交换机(企业内的电话交换系统),用于在本地线路上的VoIP(互联网协议语音或IP)用户之间切换呼叫,同时允许所有用户共享一定数量的外部电话线路…

【Java】网络编程:TCP_IP协议详解(IP协议数据报文及如何解决IPv4不够的状况)

🌈个人主页:努力学编程’ ⛅个人推荐: c语言从初阶到进阶 JavaEE详解 数据结构 ⚡学好数据结构,刷题刻不容缓:点击一起刷题 🌙心灵鸡汤:总有人要赢,为什么不能是我呢 &#x1f354…

编译和链接以及makefile

编译和链接以及makefile 问题引出,为什么我们会忽略编译和链接这个步骤 一定都会用到但却很少被重视的步骤——编译和链接,通常这两个步骤被我们的IDE封装的很完美,我们一般都是一件构建。 但是一旦遇到错误的时候,尤其是链接相关…

动手学深度学习(pytorch土堆)-05-1神经网络

Neural network 以下是 torch.nn 库中各个组件的详细分类: 1. 容器 (Containers) torch.nn.Sequential: 顺序容器,用于将层按顺序堆叠在一起。torch.nn.ModuleList: 模块列表,用于存储多个子模块。torch.nn.ModuleDict: 模块字典&#xff…

Pycharm出现Please specify a different SDK name报错,但是看不到重名环境解决方案

这句话的意思是出现了重名的环境 ,一般情况下删除重名的环境即可解决问题。做法如下图所示 1,点击右上角齿轮→settings(或者File→settings)进入Python Interpreter 2.点击这个沙漏按键,你会发现多了几个环境&#x…

minio的最大优势--运维(五)

前言: 前面讲了minio的简介、场景、单机部署、集群部署等内容,现在简单来讲讲它的运维工具。 一、Minio客户端使用(这个中文文档没问题) 官方文档地址:https://docs.min.io/docs/minio-client-quickstart-guide.html…

穿什么有这么重要?——装饰模式

文章目录 穿什么有这么重要?——装饰模式穿什么有这么重要?小菜扮靓第一版小菜扮靓第二版装饰模式小菜扮靓第三版商场收银程序再升级简单工厂策略装饰模式实现装饰模式总结 穿什么有这么重要?——装饰模式 穿什么有这么重要? 时…

手写redis实现分布式锁详细教程,满足可续锁、可重入等分布式锁条件

前言 本文将讨论的做一个高并发场景下避不开的话题,即redis分布式锁。比如在淘宝 的秒杀场景、热点新闻和热搜排行榜等。可见分布式锁是一个程序员面向高级的一门必修课,下面请跟着本篇文章好好学习。 redis分布式锁有哪些面试题 1.Redis做分布式的时…

执着追求与匠心独运 朵拉朵尚2024欧洲溯源 深入德国巴斯夫

执着追求与匠心独运 朵拉朵尚2024欧洲溯源 深入德国巴斯夫 前不久,朵拉朵尚踏上了其2024年欧洲溯源之旅的第三站—德国巴斯夫,一场旨在深化护肤智慧、共谋新品未来的深度交流盛宴在此拉开帷幕。作为全球最大的化工公司,巴斯夫不仅以其卓越的…

电脑录屏工具哪个好用?推荐新手几款实用工具介绍

现在不管是录个教学视频教教别人,还是直播游戏给粉丝看,或者是展示你的产品,都得用到它。但是市面上的录屏软件多得让人眼花缭乱,新手可能一看就懵了。别急,今天我就给你介绍几个特别好用的电脑录屏工具,不…

攻克大模型面试!RAG基础与应用痛点一网打尽!

RAG相关理论知识与经验整理。 谈到大模型在各垂直领域中的应用,一定离不开RAG,本系列开始分享一些RAG相关使用经验,可以帮助大家在效果不理想的时候找到方向排查或者优化。 本系列以医疗领域为例,用面试题的形式讲解RAG相关知识…

唤醒金融数据中台:我的数据驱动秘籍

目录 一、明析业务痛点和机会点二、数据驱动精准化营销三、一体化数据平台——整合金融数据1. 数据整合与标准化2. 数据服务与共享3.业务体系集中化 四、强化金融数据安全,筑牢数据保护防线 在当今数字化时代的大潮中,数据无疑是金融行业最耀眼的财富。作…

销售管理中的难题,你是否也深陷其中?

销售管理中的难题似乎总是让人头疼。从客户跟进不及时,到销售数据分析不足,再到团队沟通不畅,导致商机频频流失。销售目标总是难以达成,业绩压力越来越大,但解决方案却总是力不从心。面对这样的问题,你是不…

Chainlit集成LlamaIndex并使用通义千问模型实现AI知识库检索网页对话应用增强版

前言 之前使用Chainlit集成LlamaIndex并使用通义千问大语言模型的API接口,实现一个基于文档文档的网页对话应用。 可以点击我的上一篇文章《Chainlit集成LlamaIndex并使用通义千问模型实现AI知识库检索网页对话应用》 查看。 本次针对上一次的代码功能进一步的完善…

推动公平学习与身份归一化的视网膜神经疾病数据集

人工智能咨询培训老师叶梓 转载标明出处 在机器学习领域,公平性(也称为公正性或平等性)是一个日益受到关注的话题,它对于社会的福祉至关重要。然而,目前缺乏专门用于公平学习且包含成像数据的公共医学数据集&#xff…