当前位置: 首页 > news >正文

Java基础复习(JavaSE进阶)第六章 IO流体系

6-1 File类

01 122、File、IO流概述

02 123、File类:对象的创建

03 124、File类:判断、判断信息相关的方法

04 125、File类:创建、删除文件的方法

05 126、File类:遍历文件夹的方法

6-2 前置知识

01 127、前置知识:方法递归

02 128、前置知识:方法递归的算法、执行流程详解

代码实现:

总结:

03 129、方法递归的案例:文件搜索

代码实现:

04 130、前置知识:字符集

05 131、前置知识:字符集之UTF-8编码

06 132、前置知识: Java代码完成编码、解码

关于为什么会出现负数:

在二进制中0会被解码为正数,1会被解码为负数。字母都以0开头,utf-8

中汉字通常以110及以上开头且由三个字符组成,所以会出现三个负数。

6-3 字节流

01 133、IO流概述

将方向和数据组合,实际上就会出现四种流:

02 134、IO流:文件字节输入流-每次读取一个字节

 

03 135、IO流:文件字节输入流-每次读取一个字节存在的问题

使用while循环改造,防止由于文件内容过多不好手写输出

04 136、IO流:文件字节输入流-每次读取多个字节

05 137、IO流:文件字节输入流-每次读取多个字节、改进,注意事项

适合读取字节,做文件拷贝,但是还是不适合读取汉字

思考:

06 138、IO流:文件字节输入流-一次读取完全部字节

其中有一些细节:

首先我们用一个f对象代表我们需要获取数据的文件。之后我们用.length方法获取文件内容长度。

由于文件是在硬盘当中,数据应该会很大,所以我们要用一个long类型的变量size去储存它。且.length方法默认的返回值类型就是long类型。

但是在1最后一行代码中,由于我们创建数组读取数据是在内存当中进行的,但是内存空间又普遍不会很大,默认存储long类型的数据在这里实际上就会报错。我们可以通过强转为int类型来解决这个报错。前提是你要存储的文件大小真的不会超过int的范围。

sun公司直接提供了一个api用来实现我们方法1的需求。

简单太多了。在这个方法的源码当中,你会发现内部有自己的判断机制,如果你要读取的文件过大,方法会抛出内存溢出的异常。

07 139、IO流:文件字节输出流-写数据出去

6-4 字节流、字符流

01 140、IO流:字节流的应用-文件复制

02 141、释放资源的方案一:try-catch-finally

在原先的流的释放当中,如果中间的代码出现了异常,那么程序就无法执行到释放流的部分了。所以这种释放流的方式是不专业的

所以我们可以考虑如下操作:

哪怕使用return跳出方法,方法中的finally依旧可以执行

03 142、释放资源的方案二:try-with-resource

04 143、IO流:字符流-文件字符输入流

05 144、IO流:字符流-文件字符输出流

06 145、IO流:字符流-文件字符输出流的注意事项

6-5 缓冲流

01 146、IO流:缓冲流-概述-字节缓冲流

缓冲流的作用:

自带八kb缓冲池,需要反复调用的次数更少,更快。

02 147、IO流:缓冲流-字符缓冲输入流

03 148、IO流:缓冲流-字符缓冲输出流

04 149、IO流:原始流、缓冲流的性能分析

字节流一个一个存储代码如下:

定义起始时间和最终时间算出时间差

使用字节流按数组存储的的原始代码:

使用字节缓冲流一个一个字节复制的原始代码:

使用字节缓冲流按照数组复制的原始代码:

结果:

第一种得跑一天,直接淘汰

缓冲池越大耗时越短,但是大到一定程度之后提升效果会越来越弱

05 150、引出问题:不同编码读取会出现乱码

6-6 其他流

01 151、IO流:转换流-字符输入转换流

格式代码如下:

02 152、IO流:转换流-字符输出转换流

实现代码如下:

03 153、IO流:打印流

谁代表了打印流:

实现代码如下:

代码实现如下:

二者打印数据完全没有区别,但是写数据有区别,一个是写字符,一个是写字节

04 154、IO流:打印流的应用

代码实现如下:

05 155、IO流:数据流

代码实现如下:

代码实现如下:

06 156、IO流:序列化流

序列化流都是字节流

代码实现如下:

注意:对象如果需要序列化,必须实现序列化接口 Seariaizable

标记接口,没有实际作用,只是告知虚拟机该对象可以序列化

代码实现如下:

不想参与序列化的变量可以在前写一个 transient

07 157、补充知识:IO框架

相关文章:

  • 语音合成(TTS)从零搭建一个完整的TTS系统-第二节-中文转拼音
  • 【Python Web开发】01-Socket网络编程01
  • 【Python爬虫基础篇】--3.cookie和session
  • 乐视系列玩机---乐视1s x500 x501 x502等系列线刷救砖以及刷写第三方twrp 卡刷第三方固件步骤解析
  • 现有一整型数组,a[8] = { 4,8,7,0,3,5,9,1},现使用堆排序的方式原地对该数组进行升序排列。那么在进行第一轮排序结束之后,数组的顺序为?
  • 【HTML】【Web开发】滑动条挑战
  • Docker的基本概念和一些运用场景
  • Linux[基础指令][2]
  • Vue3 + Vite + TS,使用 ExcelJS导出excel文档,生成水印,添加背景水印,dom转图片,插入图片,全部代码
  • Java中的方法重写(Override)与方法重载(Overload)详解
  • 位运算练习:起床困难综合征(贪心,位运算)(算法竞赛进阶指南学习笔记)
  • 关于ubuntu密码正确但是无法登录的情况
  • 互联网大厂Java面试:从基础到进阶的技术点探讨
  • 短信验证码安全实战:三网API+多语言适配开发指南
  • C语言学习记录(17)编译和链接
  • vue3 + element-plus中el-drawer抽屉滚动条回到顶部
  • Scenario Dreamer:用于生成驾驶模拟环境的矢量化潜扩散模型
  • 【Linux禁用历史命令】
  • 从零开始配置 Zabbix 数据库监控:MySQL 实战指南
  • SSH 互信被破坏能导致 RAC 异常关闭吗
  • 金融监管总局:支持将上海打造成具有国际竞争力的再保险中心
  • 解密帛书两千年文化传承,《帛书传奇》央视今晚开播
  • 2025欧亚经济合作发展论坛在沪举办
  • “80后”师虎已任陕西旬邑县委书记
  • 马上评丨全面取消 “仅退款”,反内卷的必然
  • 中国政府援缅第八批紧急人道主义地震救灾物资抵达缅甸