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

1-38 流资源类结构

一 简介

1. Java中所说的流资源--IO流

2.为什么学习留资源? --要操作文件中的数据

 将数据写入指定的文件

 将数据从指定的文件读取

3.分类 -- 四大基流 , 八大子流 (重点)

 按照流向分 : 输入流 和输出流

 按照操作数据资源的类型划分

 字符流 (重点)

 Reader -- 字符输入流

  FileReader / BufferedReader

 Writer -- 字符输出流

 FileWriter / BufferedWriter

 字节流

 InputStream -- 字节输入流

 FileInputStream / BufferedInputStream

 OutputStream -- 字节输出流

 FileInputStream / BufferedInputStream

 子流类名 , 前缀表示该子流 操作的是什么 (File 文件 Buffered 缓存区) 后缀表示该子流属于那种流资源

 四大基流 都是抽象类 , 只用来参考 , 具体的实操需要通过子流完成

 字符流 -- 字符输出流系列 -- Writer这一体系

二 具体

1.Writer类设计

2.FileWriter类设计

3.常用方法

使用这种方式创建对象 如果没有直接创建 , 如果有 覆盖

 总结 : 适用于所有的IO流操作

 1 将对象声明写在 try块 外, 并赋值 null

 2 在try块中实例化对象 , 并编写操作数据资源的代码

 3 在finally中 编写关闭资源的代码 , 要先进行判空

 想要换行 怎么办

BufferWriter

①类设计

②常用方法 ---与Writer类同名的方法 用法一致

 

 Reader -- FileReader/BufferedReader

 中文解析 , 可能乱码 : 文件的编码集 与 系统的编码集 不一致 

 读一个的方法 是通过 计算机底层 游标指针 频繁在 文件和指定显示区域 之间移动  , 对内存资源消耗大 , 将所有的数据先读取到临时存储区域 ,  将区域中的内容整体显示 --读一组的方法

 上述代码 虽然降低了内存资源的消耗 , 但是定时字符数组 , 长度不好确定, 一旦过大 浪费内存空间 Java -- BufferedReader

 

 流总结

 在流中都定义操作数据的多种方法 

 Writer系列 (append(char c) write(int ch)) 写一堆 (write(String data) write(char[] ))

 Reader 系列 读一个 read() 读一堆 read(char[] /readLine())

 无论调用的是哪一种 , 实质上 调用计算机底层的 读一个或写一个

 字节流

 1 OutputStream -- 字节输出流

 FileOutputStream/BufferedOutputStream

 FileOutputStream 用来实例化对象

 上述代码既没有刷新 , 也没有 关闭资源 ,但是数据写入了

 计算机底层操作的是字节数据 , 流正好是字节流 , 可以直接将数据写入

 上述代码不能直接将数据写入 操作的是缓存区 因此需要将数据资源刷新到指定的文件中 , 实际开发中如果 真的 使用字节流 , 建议使用 BufferedOutputStream , 可以降低内存资源的消耗

 InputStream 字节输入流

 FileInputStream/BufferedInputStream

 

 ② BufferedInputStream 类

 字节流高效流 ()带有Buffered缓存技术的流 , 并没有像 字符高效流那样 , 提供高效方法 (newLine readLine)

 定义高效流原因 ,操作缓存区 来代替 直接操作计算机底层 , 降低系统消耗, 

 补充流

 1 转换流 

 InputStreamReader 将字节转化为字符

 OutputStreamWriter 将字符转换字节

 实际开发中用的少 替代体

 System.in

 System.out.print

 2 序列化和反序列化

 ① 序列化 : 使用指定的技术 将对象的数据存储在 指定的文件或通过网络上传的过程

 ② 反序列化 : 将指定的文件 或 网络上的对象中的数据 获取到

 ObjectOutputStream

 ObjectInputStream

 

 序列化 操作

上传数据 ,将数据以字节码的形式存储在文件中 

反序列化之后就能看懂了

 注意 ! ! !

 在类序列化过程中 , 如果添加了新的属性 

 修改对象之后 要进行一次序列化 , 避免反序列出现问题

相关文章:

1-38 流资源类结构

一 简介 1. Java中所说的流资源--IO流 2.为什么学习留资源? --要操作文件中的数据 将数据写入指定的文件 将数据从指定的文件读取 3.分类 -- 四大基流 , 八大子流 (重点) 按照流向分 : 输入流 和输出流 按照操作数据资源的类型划分 字符流 (重点) Reader -- 字符…...

nginx的前世今生(二)

书接上回: 上回书说到,nginx的前世今生,这回我们继续说 3.缓冲秘籍,洪流控水 Nginx的缓冲区是其处理数据传输和提高性能的关键设计之一,主要用于暂存和管理进出的数据流,以应对不同组件间速度不匹配的问题…...

浏览器跨域详解

一、什么是跨域 浏览器跨域是指当一个Web应用程序试图访问另一个协议、主机或端口不同的资源时,所发生的情况。这主要是由于浏览器的同源策略造成的,它是为了网站的安全而设置的安全限制,防止一个网站恶意访问另一个网站的资源。当然这是比较…...

华为5700配置

恢复出厂设置,清空配置 1、更改名字 system-view sysname tp-10-50-01-04 2、配置管理接口 int vlan 1 ip add 10.50.1.4 255.255.254.0 quit 2、链路汇聚 interface eth-trunk 1 mode lacp quit 3、绑定端口 interface eth-trunk 1 trunkport gigabitethernet …...

使用Axios从前端上传文件并且下载后端返回的文件

前端代码: function uploadAndDownload(){showLoading();const fileInput document.querySelector(#uploadFile);const file fileInput.files[0];const formData new FormData()formData.append(file, file)return new Promise((resolve, reject) > {axios({…...

open 函数到底做了什么

使用设备之前我们通常都需要调用 open 函数,这个函数一般用于设备专有数据的初始化,申请相关资源及进行设备的初始化等工作,对于简单的设备而言,open 函数可以不做具体的工作,你在应用层通过系统调用 open 打开设备…...

ue引擎游戏开发笔记(32)——为游戏添加新武器装备

1.需求分析: 游戏中角色不会只有一种武器,不同武器需要不同模型,甚至可能需要角色持握武器的不同位置,因此需要添加专门的武器类,方便武器后续更新,建立一个武器类。 2.操作实现: 1.在ue5中新建…...

【个人博客搭建】(17)使用FluentValidation 参数校验

FluentValidation 是一个用于 .NET 的开源验证库,它提供了一种流畅的接口和强类型验证规则,使得验证逻辑表达得更加清晰和简洁。(Apache-2.0) FluentValidation 的主要作用包括: 提高代码可读性:通过使用 F…...

数据结构===散列表

文章目录 概要散列思想散列函数散列冲突开放寻址法装载因子 链表法 代码Java小结 概要 散列表是一种很有趣的数据结构。 散列表是一个很有用的数据结构。它是数组演练而来的,又是一个基于数组的扩展的数据结构。接下来看看。 散列思想 散列表用的是数组支持按照下…...

10G MAC层设计系列-(2)MAC RX模块

一、概述 MAC RX模块的需要进行解码、对齐、CRC校验。 因为在空闲的时候10G PCS/PMA会一直向外吐空闲符(x07)所以需要根据开始符、结束符将有效数据从码流中截取,也就是解码。 因为开始字符的所在位置有两种形式,而结束字符的位…...

解码Starknet Verifier:深入逆向工程之旅

1. 引言 Sandstorm为: 能提交独立proof给StarkWare的Ethereum Verifier,的首个开源的STARK prover。 开源代码见: https://github.com/andrewmilson/sandstorm(Rust) L2Beat 提供了以太坊上Starknet的合约架构图&…...

【C++语言】类和对象--默认成员函数 (中)

文章目录 前言类的六个默认成员函数:1. 构造函数概念特性做了什么?易错注意:显式定义和默认构造函数 2. 析构函数概念特征做了什么?注意事项: 3.拷贝构造函数概念特征做了什么?注意事项: 4.赋值运算符重载…...

前端递归常见应用

概览 在 JavaScript 中,递归是一种编程技术,指的是函数直接或间接调用自身的过程。 递归通常用于解决可以分解为相同子问题的问题。通过不断地将问题分解成更小的、相似的子问题,直到达到某种基本情况(不再需要进一步递归的简单情…...

AI工具如何改变我们的工作与生活

AI工具在当今社会中扮演着越来越重要的角色,它们已经开始改变着我们的工作方式和生活方式。在接下来的2000字篇幅中,我将详细探讨AI工具如何影响我们的工作和生活。 AI工具在工作中的影响: 自动化和智能化生产流程: AI工具可以通…...

深入了解C/C++的内存区域划分

🔥个人主页:北辰水墨 🔥专栏:C学习仓 本节我们来讲解C/C的内存区域划分,文末会附加一道题目来检验成果(有参考答案) 一、大体有哪些区域?分别存放什么变量开辟的空间? …...

C++构造函数和析构函数的调用顺序

一般情况下,调用析构函数的次序正好与调用构造函数的次序相反,也就是最先被调用的构造函数,其对应的析构函数最后被调用,而最后被调用的构造函数,其对应的析构函数最先被调用。 当然对象的构造函数和析构函数调用时机和…...

智能家居1 -- 实现语音模块

项目整体框架: 监听线程4: 1. 语音监听线程:用于监听语音指令, 当有语音指令过来后, 通过消息队列的方式给消息处理线程发送指令 2. 网络监听线程:用于监听网络指令,当有网络指令过来后, 通过消息队列的方…...

Leetcode 3139. Minimum Cost to Equalize Array

Leetcode 3139. Minimum Cost to Equalize Array 1. 解题思路2. 代码实现 题目链接:3139. Minimum Cost to Equalize Array 1. 解题思路 这一题是一道hard的题目,而且看了一下答出率低的离谱,就一开始被吓到了,不过实际做了一下…...

【element-ui】el-table横向滚动后,通过is-scrolling-left获取滚动高度失效的问题

el-table横向滚动后,通过is-scrolling-left获取滚动高度失效的问题 需求 现在有一个需求,需要监听el-table的纵向滚动,当滚动高度达到特定值时进行一些操作。 代码如下: methods:{throttledHandleScroll() {// 如果已经有定时器…...

JAVA中的日期

获取当前的日期 LocalDate LocalDate today LocalDate.now();System.out.println("今天是:"today);//今天是:2024-05-06String format today.format(DateTimeFormatter.ofPattern("yyyy年MM月dd日"));System.out.println("今天是:"…...

AI-Shoujo HF Patch:一站式游戏增强解决方案,解锁完整AI少女游戏体验

AI-Shoujo HF Patch:一站式游戏增强解决方案,解锁完整AI少女游戏体验 【免费下载链接】AI-HF_Patch Automatically translate, uncensor and update AI-Shoujo! 项目地址: https://gitcode.com/gh_mirrors/ai/AI-HF_Patch 你是否曾为AI-Shoujo游戏…...

AEUX:告别重复劳动,5分钟将Figma设计转为After Effects动画

AEUX:告别重复劳动,5分钟将Figma设计转为After Effects动画 【免费下载链接】AEUX Editable After Effects layers from Sketch artboards 项目地址: https://gitcode.com/gh_mirrors/ae/AEUX 还在为从Figma到After Effects的繁琐转换而烦恼吗&am…...

告别熬夜与焦虑:用百考通AI 轻松搞定本科毕业论文,把毕业季还给自己

​ 又到了毕业季,图书馆的灯亮到深夜,Word 文档里的字数像蜗牛一样爬行,导师的批注一遍遍染红屏幕……你是否也在经历这样的时刻:明明只想好好写完论文,却总被格式、查重、文献和逻辑绕得头晕眼花? 对大多…...

从实践中提炼的架构设计与工程规范

🤍 前端开发工程师、技术日更博主、已过CET6 🍨 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 🕠 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》、《前端求职突破计划》 🍚 蓝桥云课签约作者、…...

React自定义光标库use-custom-cursor:从原理到实战的完整指南

1. 项目概述:一个为React应用量身定制的光标自定义库在构建现代Web应用时,我们常常会忽略一个与用户交互最频繁、最直接的视觉元素——鼠标光标。默认的箭头指针虽然功能明确,但在追求极致用户体验和品牌一致性的今天,它显得有些单…...

2025终极指南:八大网盘直链下载助手,告别限速烦恼

2025终极指南:八大网盘直链下载助手,告别限速烦恼 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 ,支持 百度网盘 / 阿里云盘 / 中国移动云盘…...

豆包要收费了:三档订阅最贵500元/月,保留免费基础版

鱼羊 发自 凹非寺量子位 | 公众号 QbitAI五一假期余额不足之际,低调了有一段时间的豆包悄咪咪搞起了大新闻,直接冲上热搜:这个真国民级AI助手,要开始收费了。苹果App Store里,订阅服务声明已悄然登场,免费的…...

COCO数据集不只是跑Demo:手把手教你用PyTorch加载自定义训练集(含数据增强技巧)

COCO数据集实战:从数据加载到模型训练的PyTorch全流程指南 在计算机视觉领域,COCO数据集早已超越了简单的Demo演示价值,成为衡量算法性能的黄金标准。但许多开发者在使用过程中,往往止步于基础的数据加载和可视化,未能…...

NVIDIA Profile Inspector DLSS异常修复指南:从“unknown“到完美优化的技术之旅

NVIDIA Profile Inspector DLSS异常修复指南:从"unknown"到完美优化的技术之旅 【免费下载链接】nvidiaProfileInspector 项目地址: https://gitcode.com/gh_mirrors/nv/nvidiaProfileInspector 你是否曾在游戏优化时遇到这样的困境:打…...

CanMV K230实战:用板载摄像头玩转实时手写数字识别(附完整代码)

CanMV K230实战:打造离线手写数字识别终端的全流程解析 在嵌入式AI领域,能够实现实时图像处理的低功耗设备正成为创客和工程师的新宠。CanMV K230开发板凭借其出色的性能和板载摄像头模块,为这类应用提供了理想的硬件平台。本文将带你从零开始…...