活动策划网站/青岛seo经理

活动策划网站,青岛seo经理,怎么用程序做网站,淘宝网站如何推广系列文章目录 Java文件和IO流基础部分 文件VSIO流 文章目录 系列文章目录前言一、文件的定义和理解: 1.专业定义: 2.文件系统和路径: 二、IO流的定义和分类 1.定义:2.流的分类:修饰器模式的核心作用:基础结…

系列文章目录

 Java文件和IO流基础部分


                                                              文件VSIO流

文章目录

  • 系列文章目录
  • 前言
  • 一、文件的定义和理解:

                1.专业定义:

                 2.文件系统和路径:

  • 二、IO流的定义和分类
    • 1.定义:
    • 2.流的分类:
    • 修饰器模式的核心作用:
    • 基础结构:
  • 总结


前言

    在我们学习了前面的Java操作后,我们目前需要灵活的对文件进行灵活的操作,学习IO流是编程中的基础与核心技能,几乎所有的应用程序都涉及数据输入输出(I/O)操作。其实就是数据交互的一种方式,下面让我们详细的学习一下。


一、文件的定义与理解:

    首先我先谈谈我对文件的理解。文件是保存数据的地方,比如大家经常使用的word文档,txt文件,excel文件,都是文件,它既可以保存一张图片,也可以保存视频和声音。

    专业定义

  计算机文件是以计算机硬盘,光盘以及移动存储设备为载体的存储在计算机上的信息集合,其存储形式可以是文本文档,图片和程序等。文件通常具有文件扩展名,用于指示文件类型,例如,图片文件扩展名为jpg,文本文件扩展名是txt等。

   文件系统和路径:

    一个文件系统可以包含三类对象:文件,目录和符号链接。当今流行的操作系统都支持文件和目录,并且允许目录中包含子目录,处于目录树中最顶部的目录称为“根目录”。Linux和UNIX操作系统只有一个根目录/;而windows操作系统可以有多个根目录,例如“c:\”“d:\”等

    文件系统中的对象可以使用一条路径作为唯一的识别,例如,windows系统C盘下的User目录可以表示成“C:\Users”。

     路径有绝对路径和相对路径两种:

     绝对路径-------从根路径开始,对文件进行完整描述,例如,“D:\data\qst.txt”。

     相对路径-------从当前路径为参照,对文件进行描述,例如,“data\qst.txt”。

二、IO流的定义和分类:

1.定义:

     Java的IO流是实现数据输入(Input)和输出(Output)的基础,可以对数据实现读/写操作。流的优势在于使用统一的方式对数据进行操作或传递,简化了代码的操作。

         

形象的理解:

     可以把两端当成一个用户和物流中心,中间的就是外卖小哥,来回两个过程。

2.流的分类:

    按流的流向来分:

  输入流:只能从输入流中读取数据,而不能向输入流中写入数据;

  输出流:只能向输出流中写入数据,而不能从输出流中读取数据;

   按照流所操作的基本数据单元来分,可将流分为字节流和字符流。

      

核心区别在于处理数据的基本单位字节还是字符

分类基类适用场景典型实现类
字节流InputStream/OutputStream处理二进制数据(图片、视频、压缩包等)FileInputStreamByteArrayInputStream
字符流Reader/Writer处理文本数据(.txt.csv等)FileReader,StringWriter

     节点流和处理流:

  节点流可以从一个特定的数据元读写数据。而处理流(也叫包装流)是“连接”已存在的流(节点流或处理流),为程序提供更为强大的读写功能。(更加灵活。)

    我们这里详细的解释一下底层处理流:

         这其实属于一种处理模式:修饰器模式(Decorator Pattern)​ 是一种关键设计模式,它通过动态组合对象的方式,为I/O流提供灵活的功能扩展能力,同时避免因继承导致的类爆炸问题。

修饰器模式的核心作用

  1. 动态扩展功能
    在不修改原有类的基础上,通过嵌套包装(Wrapping)​的方式,为I/O流动态添加新功能(如缓冲、压缩、加密等)。

  2. 避免类爆炸
    如果通过继承实现所有功能组合(如缓冲+压缩+加密),需要为每个组合创建子类,导致类数量指数级增长。修饰器模式通过组合替代继承,仅需少量类即可覆盖所有功能组合。

  3. 保持接口一致性
    所有修饰器类(如BufferedInputStream)与基础流类(如FileInputStream)实现相同的接口(如InputStream),使嵌套调用透明化。

      修饰器模式在Java I/O中的实现

​    基础结构:
  • 抽象组件(Component)​:定义核心功能接口,如InputStream/OutputStream
  • 具体组件(Concrete Component)​:实现基础功能,如FileInputStream(读取文件)。
  • 修饰器抽象类(Decorator)​:继承自Component并持有Component的引用,如FilterInputStream
  • 具体修饰器(Concrete Decorator)​:添加具体功能,如BufferedInputStream(缓冲功能)。

     

// 基础组件:InputStream(抽象接口)
public abstract class InputStream {public abstract int read() throws IOException;
}// 具体组件:FileInputStream(基础文件流)
public class FileInputStream extends InputStream {public int read() { /* 从文件读取字节 */ }
}// 修饰器抽象类:FilterInputStream(所有修饰器的基类)
public class FilterInputStream extends InputStream {protected InputStream in;  // 持有被修饰的流对象protected FilterInputStream(InputStream in) { this.in = in; }public int read() throws IOException { return in.read();  // 默认直接调用被修饰流的方法}
}// 具体修饰器:BufferedInputStream(添加缓冲功能)
public class BufferedInputStream extends FilterInputStream {private byte[] buffer = new byte[8192];private int pos;public BufferedInputStream(InputStream in) { super(in); }@Overridepublic int read() throws IOException {if (pos >= buffer.length) {// 从底层流批量读取数据到缓冲区int bytesRead = in.read(buffer);if (bytesRead <= 0) return -1;pos = 0;}return buffer[pos++];  // 从缓冲区返回单个字节}
}

  这其实就是一种叠加的模式,你能理解吧,以下这个代码就是给大家详细说明一下:

       

// 基础流:读取文件
InputStream baseStream = new FileInputStream("data.txt");// 添加缓冲功能
InputStream bufferedStream = new BufferedInputStream(baseStream);// 再添加解压缩功能(假设GZIPInputStream是另一个修饰器)
InputStream gzipStream = new GZIPInputStream(bufferedStream);// 最终使用:依次调用缓冲→解压→文件读取
int data = gzipStream.read();

     


总结

以上就是今天要讲的内容,本文仅仅讲了文件和IO流的分类,接下来一篇我会给大家讲讲流的体系结构,以其它们是如何使用的,谢谢大家,我会持续更新的。

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

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

相关文章

Linux驱动学习笔记(四)

高级字符设备进阶 1.一个完整的IO过程包含以下几个步骤&#xff1a;1应用程序向操作系统发起IO调用请求(系统调用)&#xff1b;2操作系统准备数据&#xff0c;把IO设备的数据加载到内核缓冲区&#xff1b;3操作系统拷贝数据&#xff0c;把内核缓冲区的数据从内核空间拷贝到应用…

2025年,电脑还需要分区吗?

随着2025年的到来&#xff0c;电脑存储空间已经不像以前那么金贵&#xff0c;固态硬盘&#xff08;SSD&#xff09;容量更大、速度更快&#xff0c;云存储也成了日常标配。许多人开始质疑&#xff1a;电脑还需要像以前那样分区吗&#xff1f; 一、分区到底是什么意思&#xff…

Springboot项目集成maven-assembly-plugin进行打包

通常我们将应用部署到服务器的某个目录下&#xff0c;一般情况下我们会提供像target&#xff08;存放应用jar包&#xff09;&#xff0c;bin&#xff08;项目启动/停止脚本&#xff09;&#xff0c;config&#xff08;项目配置文件&#xff09;&#xff0c;logs&#xff08;项目…

鸿蒙NEXT项目实战-百得知识库01

代码仓地址&#xff0c;大家记得点个star IbestKnowTeach: 百得知识库基于鸿蒙NEXT稳定版实现的一款企业级开发项目案例。 本案例涉及到多个鸿蒙相关技术知识点&#xff1a; 1、布局 2、配置文件 3、组件的封装和使用 4、路由的使用 5、请求响应拦截器的封装 6、位置服务 7、三…

【DeepSeek应用】本地部署deepseek模型后,如何在vscode中调用该模型进行代码撰写,检视和优化?

若已成功在本地部署了 DeepSeek 模型(例如通过 vscode-llm、ollama 或私有 API 服务),在 VS Code 中调用本地模型进行代码撰写、检视和优化的完整流程如下: 1. 准备工作:确认本地模型服务状态 模型服务类型: 若使用 HTTP API 服务(如 FastAPI/Flask 封装),假设服务地址…

jenkins 配置邮件问题整理

版本&#xff1a;Jenkins 2.492.1 插件&#xff1a; A.jenkins自带的&#xff0c; B.安装功能强大的插件 配置流程&#xff1a; 1. jenkins->系统配置->Jenkins Location 此处的”系统管理员邮件地址“&#xff0c;是配置之后发件人的email。 2.配置系统自带的邮件A…

Android Coil3阶梯preload批量Bitmap拼接扁平宽图,Kotlin

Android Coil3阶梯preload批量Bitmap拼接扁平宽图&#xff0c;Kotlin <uses-permission android:name"android.permission.WRITE_EXTERNAL_STORAGE" /><uses-permission android:name"android.permission.READ_EXTERNAL_STORAGE" /><uses-p…

C++基础 [八] - list的使用与模拟实现

目录 list的介绍 List的迭代器失效问题 List中sort的效率测试 list 容器的模拟实现思想 模块分析 作用分析 list_node类设计 list 的迭代器类设计 迭代器类--存在的意义 迭代器类--模拟实现 模板参数 和 成员变量 构造函数 * 运算符的重载 运算符的重载 -- 运…

【系统架构设计师】操作系统 - 特殊操作系统 ③ ( 微内核操作系统 | 单体内核 操作系统 | 内核态 | 用户态 | 单体内核 与 微内核 对比 )

文章目录 一、微内核操作系统1、单体内核 操作系统2、微内核操作系统 引入3、微内核操作系统 概念4、微内核操作系统 案例 二、单体内核 与 微内核 对比1、功能对比2、单体内核 优缺点3、微内核 优缺点 一、微内核操作系统 1、单体内核 操作系统 单体内核 操作系统 工作状态 : …

系统思考:恶性循环

去年&#xff0c;我给一家知名人力资源公司交付了两个项目——一个在6月&#xff0c;另一个在8月&#xff0c;至今半年多了依然没有收到课酬。催促多次&#xff0c;得到的答复却各式各样&#xff1a;销售说老板卡了额度&#xff0c;老板说具体情况还需了解。每一次的推诿&#…

基于springboot的房屋租赁系统(008)

摘 要 社会的发展和科学技术的进步&#xff0c;互联网技术越来越受欢迎。网络计算机的生活方式逐渐受到广大人民群众的喜爱&#xff0c;也逐渐进入了每个用户的使用。互联网具有便利性&#xff0c;速度快&#xff0c;效率高&#xff0c;成本低等优点。 因此&#xff0c;构建符…

视频翻译器免费哪个好?轻松玩转视频直播翻译

你是不是觉得看外语视频很麻烦&#xff1f;每次遇到喜欢的外语电影、电视剧或动漫&#xff0c;总是要等字幕组的翻译&#xff0c;或者因为语言不通而错过精彩的情节。 这个时候&#xff0c;掌握多语种直播翻译方案就显得尤为重要&#xff0c;有了实时字幕&#xff0c;看外语视…

在cherry studio中使用MCP——本地文件管理FileSystem

cherry studio是一款开源的AI助手工具&#xff0c;可以便捷地利用API访问各种LLM&#xff0c;有关cherry studio的使用这里不再多说&#xff0c;可以参考这篇文章https://blog.csdn.net/m0_65494437/article/details/145478823 官网&#xff1a;https://cherry-ai.com/ MCP是什…

c++类和对象(下篇)下

下面就来补充一下c雷和对象最后一点内容. 首先先补充一下上一篇博客上c类和对象(下篇)上-CSDN博客最后学习的静态成员变量的小练习求123...n_牛客题霸_牛客网 (nowcoder.com)下面就是题解.灵活的运用了静态成员变量不销毁的特点,建立数组利用构造函数来完成n次相加. class A{ …

《TCP/IP网络编程》学习笔记 | Chapter 19:Windows 平台下线程的使用

《TCP/IP网络编程》学习笔记 | Chapter 19&#xff1a;Windows 平台下线程的使用 《TCP/IP网络编程》学习笔记 | Chapter 19&#xff1a;Windows 平台下线程的使用内核对象内核对象的定义内核对象归操作系统所有 基于 Windows 的线程创建进程与线程的关系Windows 中线程的创建方…

docker需要sudo才能使用

一种方法是添加当前用户到docker组里去&#xff0c;当时添加的时候貌似是没问题的&#xff0c;但是现在又不可以了 产生的报错 ❯ docker images Cannot connect to the Docker daemon at unix:///home/ying/.docker/desktop/docker.sock. Is the docker daemon running?解决…

学习记录 6 pointnet复现

一、复现代码 然后去找相关的2d的声呐图像分类的算法 融合可以搞的&#xff0c;虽然有文献但是不多&#xff0c;感觉也是可以的 """ Author: Benny Date: Nov 2019 """import os import sys import torch import numpy as npimport datetime …

Linux 文件操作-标准IO函数3- fread读取、fwrite写入、 fprintf向文件写入格式化数据、fscanf逐行读取格式化数据的验证

目录 1. fread 从文件中读取数据 1.1 读取次数 每次读取字节数 < 原内容字节数 1.2 读取次数 每次读取字节数 > 原内容字节数 2.fwrite 向文件中写入数据 2.1写入字符串验证 2.2写入结构体验证 3. fprintf 将数据写入到指定文件 4. fscanf 从文件中逐行读取内容…

Python 中下划线 “_” 的多面性:从变量到约定

# Python中下划线“_”的多面性&#xff1a;从变量到约定 在Python的语法体系里&#xff0c;下划线“_”看似毫不起眼&#xff0c;实则扮演着极为重要且多样化的角色。它不仅能作为普通变量参与编程&#xff0c;更在多个特殊场景下有着独特的用途与约定。深入理解下划线的各种…

深入 Linux 声卡驱动开发:核心问题与实战解析

1. 字符设备驱动如何为声卡提供操作接口&#xff1f; 问题背景 在 Linux 系统中&#xff0c;声卡被抽象为字符设备。如何通过代码让应用程序能够访问声卡的录音和播放功能&#xff1f; 核心答案 1.1 字符设备驱动的核心结构 Linux 字符设备驱动通过 file_operations 结构体定…