14.其他流(下篇)

news2024/12/29 4:00:21
  • 目录

    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.coloradmin.cn/o/2144749.html

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

相关文章

SpringBoot---------Actuator监控

1、引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId> </dependency> 2、开启配置 management.endpoints.web.exposure.include* 3、启动项目&#xff0c;查看监控…

C++ 在项目中使用Linux命令

一: 选择shell Linux 命令是由shell解析并转发给操作系统执行的&#xff0c;所有的shell都是从 Bourne shell&#xff08;/bin/sh&#xff09;派生的&#xff0c;Bourne shell是贝尔实验室为早期版本的Unix开发的标准shell。 每个Unix系统都需要一个版本的Bourne shell才能正…

研1日记14

1.动态卷积&#xff1a;所得卷积核与输入相关&#xff0c;参考博文&#xff1a;动态卷积之CondConv和DynamicConv-CSDN博客 针对不同的频段&#xff0c;学习注意力权重&#xff0c; 深度学习中组卷积(Group convolution)、深度卷积(Depthwise Convolution)以及深度可分离卷积…

【MQTT协议使用总结】基于-FreeRTOS平台-移植MQTT协议栈

文章目录 仓库地址关键接口适配FreeRTOS_readFreeRTOS_writeNetworkInit && NetworkConnect && NetworkDisconnect 总结 仓库地址 https://github.com/eclipse/paho.mqtt.embedded-c 这里官方给了一些平台适配案例&#xff0c;这里参考FreeRTOS的 关键接口适配…

LeetCode_sql_day27(1225.报告系统状态的连续信息)

目录 描述&#xff1a; 1225.报告系统状态的连续信息 数据准备&#xff1a; 分析&#xff1a; 代码&#xff1a; 总结&#xff1a; 描述&#xff1a; 1225.报告系统状态的连续信息 表&#xff1a;Failed ----------------------- | Column Name | Type | ----------…

MyBatis动态SQL中的`if`标签使用【后端 19】

MyBatis动态SQL中的if标签使用 引言 MyBatis 是一个优秀的持久层框架&#xff0c;它支持定制化 SQL、存储过程以及高级映射。在 MyBatis 中&#xff0c;动态 SQL 是一个非常强大的特性&#xff0c;它允许你根据不同的条件来动态构建 SQL 语句。if 标签是动态 SQL 中最常用的一…

nginx服务器安装和部署代理

文章目录 Linux下面安装nginx nginx下载官网: [nginx: download](https://nginx.org/en/download.html) 使用yum命令安装gcc环境 yum install -y wget gcc-c pcre-devel zlib-devel openssl-devel//安装多个环境 wget gcc pcre-devel 支持正则表达式 zlib-devel提供了压缩和…

C++:输入输出,字符串,命名空间

1.输出斐波那契数列的前20项 #include <iostream>using namespace std;int main() {int a[20];int i;for(i0;i<20;i){if(i<2){a[i]1;cout<<a[i]<<ends;}else{a[i]a[i-1]a[i-2];cout<<a[i]<<ends;}}return 0; } 2.输入一个字符&#xff0…

Java泛型(“代码模板”,一套代码套用各种类型)

1.什么是泛型 a.定义 i.如果不用泛型定义&#xff0c;在使用ArrayList时需要为每个class编写特定类型代码。 ii.泛型就是定义一种模板&#xff0c;既实现了编写一次&#xff0c;万能匹配&#xff0c;又通过编译器保证了类型安全。 iii.编写模板代码来适应任意…

python调用c++动态链接库,环境是VS2022和vscode2023

目录 前言&#xff1a;配置环境&#xff1a;基础夯实&#xff08;对于ctypes的介绍&#xff09;&#xff1a;1. 加载共享库2. 定义函数原型3. 调用函数4. 处理数据结构5. 处理指针6. 错误处理7. 使用 ctypes.util总结 效果展示&#xff1a;操作步骤(保姆级教学)一在VS中创建dll…

【LGR-200-Div.4】洛谷入门赛 #27 A - H题解,包含(C++, Go语言)

前言&#xff1a; 本文为【LGR-200-Div.4】洛谷入门赛 #27 A - H题解 我只是一个只会各种暴力法的蒟蒻&#xff0c;这场比赛没有参加&#xff0c;是比赛完去写的&#xff0c;但是那个题目昨天晚上才能提交&#xff0c;导致拖久了一点 最后面贴一个Go语言的&#xff0c;反正也没…

前端分段式渲染较长文章

实现思路&#xff1a; 1. 后端返回整篇文章。 2. JavaScript 分段处理&#xff1a;将文章按一定的字符或段落长度分割&#xff0c;然后逐步将这些段落追加到页面上。 3. 定时器或递归调用&#xff1a;使用 setInterval 或 setTimeout 来控制段落的逐步渲染。 代码实现示例 …

2024年企业必备10款源代码加密软件!保护公司源代码 !

随着科技的发展&#xff0c;企业的数据安全性变得愈发重要&#xff0c;特别是源代码——企业的核心资产之一。源代码一旦泄露&#xff0c;可能带来不可估量的损失&#xff0c;导致竞争优势丧失、知识产权泄露&#xff0c;甚至对企业的未来生存造成威胁。因此&#xff0c;确保源…

Centos中关闭swap分区,关闭内存交换

概述&#xff1a; Swap 分区是 Linux 系统中扩展物理内存的一种机制。Swap的主要功能是当全部的RAM被占用并需要更多内存时&#xff0c;用磁盘空间代理RAM内存。Swap对虚拟化技术资源损耗非常大&#xff0c;一般虚拟化是不允许开启交换空间的&#xff0c;如果不关闭Swap&…

城市脉络下的空间句法:整合度与选择度的深度解析

上回写过一篇&#xff0c;基于空间句法的路网整合度、选择度分析&#xff0c;当时碍于篇幅和侧重点&#xff0c;主要讲了如何安装sDNA这个插件来实现路网的整合度、选择度分析&#xff0c;并且分析部分也只是画了几条简单的线段&#xff0c;这次我们深化一下原理和指标的解析&a…

手势识别-Yolov5模型-自制数据集训练

1、源码下载&#xff1a; 大家可以直接在浏览器搜索yolov5即可找到官方链接&#xff0c;跳转进github进行下载&#xff1a; 这里对yolov5模型补充说明一下&#xff0c;它是存在较多版本的&#xff0c;具体信息可在master->tags中查看&#xff0c;大家根据需要下载。这些不同…

2024.9.18 作业

将配置桥接网络的过程整理成文档&#xff0c;发csdn 放资源里了 思维导图&#xff1a;

0基础带你入门Linux之简介

1.Linux和Windows对比 Window很明显的特征就是有C盘、D盘登各种磁盘 我们通过点击不同的盘符&#xff0c;点击里面存储的文件进行查阅的操作 而Linux则很简单&#xff0c;只有一个根目录&#xff0c;也可以说只有一个盘&#xff0c;整个系统所有的东西都是在根目录下的 我们可…

C/C++中哪些数据存放于栈区、堆区、静态区、常量区的详细说明

文章目录 1. 栈区&#xff08;Stack&#xff09;2. 堆区&#xff08;Heap&#xff09;3. 静态区&#xff08;Static&#xff09;4. 常量区&#xff08;Read-Only or Constant Section&#xff09;总结&#xff1a;栈&#xff08;Stack&#xff09;的生长&#xff1a;堆&#xf…