IO流复习

目录

    • 字符集
    • git pull origin master --allow-unrelated-histories
    • CTRL+ ALT + T进行整块代码的操作(会出现一个选项栏)
    • 字符集的编码和解码操作
    • IO流
    • 字节输入流和字节输出流
    • 文件拷贝
    • 资源释放的方式
    • 字符输入流和字符输出流
    • 缓冲流
    • 字节缓冲流的性能分析
    • 字符缓冲流
    • 字符缓冲流来复制以及自定义比较器规则
    • 转换流
    • 序列化对象
    • 打印流
    • properties 属性集合

字符集

git pull origin master --allow-unrelated-histories

CTRL+ ALT + T进行整块代码的操作(会出现一个选项栏)

  • 由于计算机只能存储二进制的数字, 不能够直接存储字符, 所以就用相应的二进制数字来表示字符, 这些二进制数字的集合就是字符集。
  • 编码前和编码后(解码)的字符集必须一致, 否则会出现中文乱码。
  • 英文和数字在任何字符集中都不会出现乱码, 因为他们都用一个字节来表示。
  • 什么是字符集:
    • 用数字来表示对应的字符.
  • 字符集分类:
    • ASCII 字符集:
      • 只能表示英文, 符号, 数字
      • 用一个字节也就是8个二进制位来表示一个字符,总共可以表示128个字符
    • GBK码表:
      • 这是我们window默认的码表, 兼容了ASCII
      • 用2个字节来存储一个中文, 也就是16个二进制位, 总共可以表示65535个字符。
      • 其中包含了几万个汉字, 以及部分日韩文字。
    • Unicode码表
      • 万国码, 是业界字符编码标准。
      • UTF-8是Unicode的一种实现形式, 用三个字节来表示一个中文 。
      • 我们程序员必须使用UTF-8来编码。

字符集的编码和解码操作

  • 编码: 直接以字节的形式输入数据,形成字节数组, 或者调用getBytes(String charsetName) 这个方法, 把一个字符串转成字节数组。
  • 解码: 直接通过String 的构造方法传入一个字节数组,在指定解码的字符集, 就可以把一个字节数组解码成对应的字符串。
  • 在这里插入图片描述

IO流

  • IO流的作用
    • 读取文件
  • IO流分类
    • 按照方向:
      • 输入流 : 内存从硬盘中读文件。
      • 输出流: 从内存把数据输入到硬盘 。
    • 按照最小单位:
      • 字节流: InputStream, OutputStream
      • 字符流:Reader Writer
      • 上述的都是抽象类, 我们要使用他们的具体实现类。

字节输入流和字节输出流

  • 读取单个字节
    • 通过read()方法读取流中的数据,返回值为实际字节所对应的int值在这里插入图片描述
  • 读取字节数组
    • 通过read(byte[]) 这个方法来读取输入流中的数据, 返回值为读取到的字节数量(具体读取的字节数量根据我们创建的字节数组的容量有关), 如果读完数据, 就会返回 -1.
    • 在这里插入图片描述
  • 读取全部字节
    • 这样可以避免中文乱码问题。
    • 两种方式: 自己创建一个可以容纳文件中所有字节的一个字节数组 或者调用readAllBytes()这个API。
    • 在这里插入图片描述
  • 输出单个字节, 输出字节数组
    • write() write(byte[])
  • 追加: 第二个参数设为true
    • OutputStream(path, append = true)
  • 换行 \r\n
    • os.write(“\r\t”.getBytes());
  • 手动刷新, 关闭流
    • flush() close()
  • 在这里插入图片描述

文件拷贝

  • 进行字节输出流和字节输入流的测试。
  • 在这里插入图片描述
  • 在这里插入图片描述

资源释放的方式

  • try - catch - finally
    • 在这里插入图片描述
    • 在这里插入图片描述

字符输入流和字符输出流

  • 读的是字符串或字符数组: String char[]
  • Reader 和 Writer
  • 整体操作和字节输出流和输入流差不多, 只不过容器不是字节数组了, 而是字符数组 char[] chars
  • 在这里插入图片描述
  • 在这里插入图片描述

缓冲流

  • 缓冲流原理:
    • 有一个缓冲区, 其实是在内存中存在一个8kb的缓冲区, 用来缓存数据, 每次读和取数据的时候都从缓冲区中读取数据。
  • 缓冲流作用:
    • 自带缓冲区, 可以提高原始的字节流和字符流的读取数据的性能。
    • API
      • BufferedInputStrean(InputStream is)
      • BufferedOutputStream(OutputStream ot)
    • 本质就是对原来的字节流进行了封装,多了一个缓冲区, 其他的方法都跟字节流一样, 代码就不写了

字节缓冲流的性能分析

  • 就是分别用字节流和字节缓冲流来拷贝文件, 看具体拷贝所花的时间。
  • 在这里插入图片描述

字符缓冲流

  • 字符输入缓冲流:BufferedReader

    • 多了一个方法, readLine()按行读取, 如果读到末尾就会返回空
    • readLine() 的好处:
      • 不需要我们在内存中创建一个字符数组了, 节省了空间
      • 每次读取一行数据, 对于 user = ‘张三‘ password = '123’这种必须按照行读的数据, 不会出现那种按照字符读数据只读到关键信息的前部分。
    • 在这里插入图片描述
  • 字符输出缓冲流: BufferedWriter

    • 多了一个方法, newLine() 换行读取, 相当于 write(“\r\t”).
    • 在这里插入图片描述

字符缓冲流来复制以及自定义比较器规则

  1. 创建字符缓冲流对象
  2. 用输出缓冲流读取文件中的数据, 并放到自定义的List容器中
  3. 对List中的数据进行排序
    1. 通过Collections 工具类来实现排序, 但是需要通过自定义比较器对象 Comparator 来实现排序。
  4. 将List中排好序的数据通过循环的方式用字符输出缓冲流来输出到指定的文件中
  5. 代码:
    6. 在这里插入图片描述

转换流

  • 目的:
    • 用来解决不同编码进行读取时, 出现乱码的问题。 针对的是字符流读取乱码问题。
  • 转换的方式:
    • 原始数据按照字节流的方式进行读取, 这样不会出问题, 因为字节是最基本的单位, 最后把这些按照字节读取的数据按照指定的编码进行转换, 转换成对应的字符流。
  • 字符输入转换流: InputStreamReader(InputStream is, String charSetName)
    • 在这里插入图片描述
  • 字符输出转换流: OutPutStreamWriter(OutputStream os, String charSetName)
    • 在这里插入图片描述

序列化对象

  • 什么是对象序列化:
    • 把对象从内存中存到磁盘中叫做序列化, 被存储的对象必须要实现Serializable接口
    • ObjectOutputStream( FileOutputStrean os) writeObject(Object o)
    • 在这里插入图片描述
  • 反序列化:
    • 把磁盘中的对象读取到内存中
    • 直接看代码
    • 被序列化的类, 可以加上 transient 这个关键字, 表示这个字段不会被序列化
    • 可以设置序列化版本号, 静态常见并且名字必须为 serialVersionUID
    • 在这里插入图片描述

打印流

  • 可以打印任何类型的数据,有字节打印流和字符打印流
  • 这两种打印的方式都是一样的, 唯一区别就是在写数据的时候有区别, 但是我们写数据用字节/字符输出流
  • 优势:
    • 由于源码中内部都new了 缓冲流, 所以打印的很快, 很高效
    • 在这里插入图片描述
    • 在这里插入图片描述
  • 打印流实现重定向
    • 主要就是System.setOut("我们自己的流“) 这个方法, 把系统的打印流改成我们自己的打印流
    • sout的原理就是一个打印流, out是一个打印流对象
    • 在这里插入图片描述

properties 属性集合

  • 是Map家族的一员, 不过已经离家出走了
  • 这个类的作用:
    • 可以把属性 集合的键值对数据存放到属性文件中, 其实也是个IO流
  • store(Writer w, String commons);
    • 将键值对数据加载到指定的属性文件中
  • load(Reader r)
    • 从指定的属性文件中读取键值对数据
  • 代码图片
    • 在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

算法题:图的表示形式与遍历框架

图的基本概念 在数据结构和算法上,图的数据表示一般使用邻接表和邻接矩阵的形式。 比如: 邻接表和邻接矩阵存储如下。邻接表是用vector[vector[i]] 存储每个节点指向的节点,邻接矩阵是用一个二维矩阵matrix[i][j]表示,如果第数据…

小米手机root后过软件检测

工具: https://wwp.lanzouf.com/b0cybm3ib 密码: 9hn8 视频讲解:隐藏root终极教程(2022年) 演示机型:小米10,安卓14,MIUI14.0.2 问题描述 安装magisk后使用病毒扫描发现支付环…

Flink (十) --------- 容错机制

目录一、 检查点(Checkpoint)1. 检查点的保存2. 从检查点恢复状态3. 检查点算法4. 检查点配置5. 保存点(Savepoint)二、状态一致性1. 一致性的概念和级别2. 端到端的状态一致性三、端到端精确一次(end-to-end exactly-…

ActiveMQ使用(二):在JavaScript中使用mqtt.js

ActiveMQ使用(二):在JavaScript中使用mqtt.js 1. 环境准备 jQuery-1.10 下载地址:https://www.jsdelivr.com/package/npm/jquery-1.10.2?tabfilesmqtt.js 4.3.7: 下载地址:https://www.jsdelivr.com/package/npm/mqtt 2. 相关代码 <!DOCTYPE html> <html lang&q…

和开振学Spring boot 3.0之Spring MVC:④获取参数(上)

之前&#xff0c;我反复说过处理器封装了控制器&#xff0c;HandlerMapping的机制找到处理器后&#xff0c;通过处理器就能运行控制器&#xff0c;那么处理器增强了控制器什么功能呢&#xff1f; 我们用脑子想一下&#xff0c;要运行控制器之前&#xff0c;我们需要做什么&…

《Java8实战》第1章 Java 8、9、10 以及 11 的变化

如想了解 Oracle 公司对 JDK 的最新支持情况&#xff0c;请访问https://www.oracle.com/technetwork/java/java-se-supportroadmap.html。所有的示例代码均可见于图灵社区本书主页 http://ituring.com.cn/book/2659“随书下载”处。 1.1 为什么要关心 Java 的变化 Java8做的…

小程序的组件化开发

目录&#xff1a; 1 小程序组件化思想 2 自定义组件的过程 3 组件样式实现细节 4 组件使用过程通信 5 组件插槽定义使用 6 Component构造器 在小程序里面需要创建组件的话需要在最外层建component包&#xff0c;然后在使用新建component来创建类似page的4个文件&#xff…

Spark 简介与原理

目录标题1 Spark 简介与原理1.1 Spark与Hadoop的区别1.2 Spark的应用场景1.3 Spark的作业运行流程1.4 Spark 2.X与Spark 1.X的区别1 Spark 简介与原理 Spark 是一个大规模数据处理的统一分析引擎。 具有迅速、通用、易用、支持多种资源管理器的特点。 Spark生态系统: Spark SQL…

C++之AVL树

文章目录前言一、概念二、AVL树结点的定义三、AVL树的插入四、AVL树的旋转1.右单旋的情况以及具体操作抽象图h 0h 1h 2代码实现2.左单旋的情况以及具体操作抽象图代码实现3.右左双旋的情况以及具体操作抽象图h 0h 1h 23.左右双旋的情况以及具体操作抽象图5.总结6.完整实现…

stable-diffusion-webui浅叙

GitHub - AUTOMATIC1111/stable-diffusion-webui: Stable Diffusion web UI 使用Git下载&#xff1a; git clone https://github.com/AUTOMATIC1111/stable-diffusion-webui.git 运行 webui-user.bat : git clone https://github.com/AUTOMATIC1111/stable-diffusion-webui.g…

Python每日一练(20230413)

目录 1. 最后一个单词的长度 ※ 2. 全排列 &#x1f31f;&#x1f31f; 3. 计数质数 ※ &#x1f31f; 每日一练刷题专栏 &#x1f31f; Golang每日一练 专栏 Python每日一练 专栏 C/C每日一练 专栏 Java每日一练 专栏 1. 最后一个单词的长度 给你一个字符串 s&…

sql server 入门教程

sql server 入门教程 1、创建数据库 1&#xff09;鼠标右键数据库选项&#xff0c;点击新建数据库 2&#xff09;命名数据库 根据自己业务情况取一个自定义数据库名字&#xff0c;比如&#xff1a;my_database 3&#xff09;查看数据库 如果添加没看到&#xff0c;那么可鼠…

知识图谱:Neo4j数据库的基本使用——创建张学良的关系谱

一、知识图谱及Neo4j数据库介绍 知识图谱&#xff08;Knowledge Graph&#xff09;是人工智能的重要分支技术&#xff0c;它在2012年由谷歌提出&#xff0c;是结构化的语义知识库&#xff0c;用于以符号形式描述物理世界中的概念及其相互关系&#xff0c;其基本组成单位是“实体…

安全防御第四天:防病毒网关

一、恶意软件1.按照传播方式分类&#xff08;1&#xff09;病毒病毒是一种基于硬件和操作系统的程序&#xff0c;具有感染和破坏能力&#xff0c;这与病毒程序的结构有关。病毒攻击的宿主程序是病毒的栖身地&#xff0c;它是病毒传播的目的地&#xff0c;又是下一次感染的出发点…

基于目标级联法的微网群多主体分布式优化调度(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

花了近三周时间对 ChatGPT 进行多方面了解、体验后写的报告,超级全面,建议想了解的朋友看看

优质介绍视频&#xff1a; GPT4前端【AI编程新纪元】 【渐构】万字科普GPT4为何会颠覆现有工作流&#xff1b;为何你要关注微软Copilot、文心一言等大模型 ChatGPT 是什么&#xff1a;ChatGPT最初是2022年11月30日由OpenAI开发并推出的聊天机器人&#xff0c;是基于 GPT-3.5 …

Spring 源码分析(二)——GenericBeanDefinition 分析

BeanDefinition 中存储着 Bean 的定义信息&#xff0c;它具有属性值、构造函数参数值以及具体实现 Bean 提供的进一步信息&#xff0c;在学习 Spring 的 Bean 初始化流程之前&#xff0c;还是非常有必要先了解一下 BeanDefinition。 一、注册 Bean 示例 首先&#xff0c;本文…

SQL Server的日志传送

日志传送和复制一、前言二、相关术语和定义三、日志传送和复制3.1、在主数据库丢失时从辅助数据库进行复制的要求和过程3.2、使用事务复制进行日志传送3.3、使用合并复制进行日志传送一、前言 日志传送允许您自动将事务日志备份从主服务器实例上的主数据库发送到单独辅助服务器…

高效管理 Linux 进程:如何后台执行程序、查看进程、终止任务

目录前言一、nohup命令详解1-1、nohup命令介绍1-2、语法格式1-2-1、基础语法介绍1-2-2、执行脚本文件1-2-3、执行python文件1-2-4、拓展延申&#xff1a;在服务器上运行后台进程1-2-5、nohup和&的区别二、进程查看2-1、jobs命令&#xff08;基本不用&#xff09;2-2、ps命令…

Msray-Plus采集工具让您的市场营销更加简单,让您的营销成果更加显著

市场营销是现代企业不可或缺的一环&#xff0c;企业的发展和营销成果密不可分。然而&#xff0c;市场营销的过程中&#xff0c;需要大量的数据采集和整理工作&#xff0c;这对于营销人员来说是一项繁琐的工作&#xff0c;同时也是一项非常重要的工作。因为数据的准确性和完整性…
最新文章