小白菜鸡学JAVA IO流

Java实现--游戏次数案例(IO流文件存储游戏次数) 案例: 有一个猜数字小游戏,需要限制玩家的游戏次数,当超过5次时,提示玩家:免费游戏次数已用完,请付费。案例分析: 可以用文件来存储游戏次数,玩家每玩一次游戏,游戏次数加1,同时更新文件中存储的数据,当文件中的数据大于5的时候,就可以给出提示:免费游戏次数已用完,请付费。实现步骤: 1.创建一个文件,存储游戏次数 2.创建一个Propeties集合 3.把文件中的元素添加到集合中 4.把 阅读详情

废话:曾经有一次我本来想在Java课上的课群上问一下对于 IO 技术对于一些特定场景和开发规范以及不同用法对于性能的影响的问题,结果别人就直接把垃圾课本的东西给我截图过来叫我看,然后一堆人跟风讽刺我不认真看书,对不起,我错了。因此,本次文章就以一个小白身份来分享一下 Java IO流 自己做的一些实验。

1. IO类树

在这里插入图片描述

Java-IO流的方式有很多,我们如何彻底来理解这些IO类的设计初衷,我们就要体会理解设计者的想法。说实话这么多的类自己也不一定记得住,最好就是根据场景对这些类的用法有一个深刻的理解,最好就是不同的场景的能有不同的用法区分。

2. 灵魂之问:什么是流?我们为什么需要 IO 类?

什么是流?

所谓流,就是流动的数据,我们管理这些数据的出入的工具就是一个水龙头,我们为了功能更好的区分开来,我们设计了一个从目标区域取水到内存的水龙头(Input),一个是从内存灌水到目标区域的水龙头(Ouput)

因此我们的 IN 和 OUT 是相对于本体内存而言的。

当然了,有时候又这样的情况就是,比如我们从Server写入数据到Client的机器上,那么Server就是本体,我们的Server上的代码就是Output了,Client上的代码就是Input了。

是in还是out在于我们赋予代码的这台机器到底在执行一个怎样的角色

这样你想一下,为什么我们的print是 System.out.print ?

因为我们是从内存取水(数据)出来显示到屏幕上的,所以是out。

我们流动的这些数据根据类型分为:字节B和字符char

因为他们在数据类型上表示的是连续的多个的数据,因此,我们用char[]表示字符流,用byte[]表示字节流。

我们的水龙头也是分类的,分为:点到点的水龙头(节点流),这样的水龙头能非常直接而纯粹地完成数据传输的功能,但是你想,这样会不会单一了?

因此我们设计了一种更高级的水龙头包装器,这就好像道具加成一样,我们能在原来的点到点的水龙头实现更高级的功能,比如buffer,我们就相当于在水龙头的中间加了一个缓冲的水池,我们取水的时候就能大瓢大瓢地直接从水池取水,就无需老是守着我们小口径水龙头等老久了。

除此之外,还有一种(高级的水龙头道具)处理流:Data,比如我们读入的一个数据类型long(8B),用Stream的方式或者Reader的方式读取的话不一定能8B直接读取到,我们用了Data包装一下水龙头,他就能直接以8B进行格式化的读取了

Object处理流的化可以把对象转成二进制数据,序列化地读取一个抽象的数据。

我们还有其他很多高级的处理流(水龙头道具),我们后面再讲。

记住:流工具,就是一个数据流动的管理器

3. 每一个IO类不妨来个小实验?

3.1 Reader 实验

我们即将测试以下 Reader 的用法:

  1. BufferedReader - LineNumberReader
  2. CharArrayReader
  3. InputStreamReader
  4. FileReader
  5. PipedReader
  6. StringReader
  7. FilterReader - PushbackReader
	//代码格式
    public static void readFile(String path){
        try{

        }catch(Exception e){
            e.printStackTrace();
        }finally{
            try{

            }catch(Exception e){
				e.printStackTrace();
            }
        }
    }

3.1.1 InputStreamReader

(水龙头)(内存到内存)点对点
这个是我们的老朋友了,这个就是一个Byte[]–>Char[]的转化器了,因此他需要到InputStream 作为初始化。

    public static void readFile(String path){
        File file = new File(path);
        FileInputStream fileInputStream = null;
        InputStreamReader inputStreamReader = null;
        int array_size = 9000;
        try{
            fileInputStream = new FileInputStream(file);
            inputStreamReader = new InputStreamReader(fileInputStream);
            char[] chars_tmp = new char[array_size];
            int readLength = inputStreamReader.read(chars_tmp);
            while(readLength!=-1){
                if(readLength==array_size){
                    System.out.println(chars_tmp);
                }else{ // 当我们在读取最后一次的时候,读取满的长度我们需要新建一个数组来承受
                    char[] chars_tmp_end = new char[readLength];
                    System.arraycopy(chars_tmp, 0, chars_tmp_end , 0, readLength);
                    System.out.println(chars_tmp_end);
                }      
                readLength = inputStreamReader.read(chars_tmp);
            }
        }catch(Exception e){
            e.printStackTrace();
        }finally{
            try{
                fileInputStream.close();
                inputStreamReader.close();
            }catch(Exception e){
                e.printStackTrace();
            }
        }
    }

3.1.2 FileReader

(水龙头)(硬盘到内存)
这是对InputStreamReader的一种拓展化,我们用字符来读取文件数据,另外,他可以用buffer道具来辅助自己,为什么我们要另外这样写一个FileReader而不是直接用InputStreamReader呢?同理,我们是为了达到一种开发的规范,也是为了我们能够更好地进行理解和构造代码。

而且他可以直接从File进行构造数据流的水龙头。(更方便了)

    public static void readFile(String path){
        File file = new File(path);
        FileReader fileReader = null;
        int array_size = 9000;
        try{
            fileReader = new FileReader(file);
            char[] chars_tmp = new char[array_size];
            int readLength = fileReader.read(chars_tmp);
            while(readLength!=-1){
                if(readLength==array_size){
                    System.out.println(chars_tmp);
                }else{ // 当我们在读取最后一次的时候,读取满的长度我们需要新建一个数组来承受
                    char[] chars_tmp_end = new char[readLength];
                    System.arraycopy(chars_tmp, 0, chars_tmp_end , 0, readLength);
                    System.out.println(chars_tmp_end);
                }      
                readLength = fileReader.read(chars_tmp);
            }
        }catch(Exception e){
            e.printStackTrace();
        }finally{
            try{
                fileReader.close();
            }catch(Exception e){
                e.printStackTrace();
            }
        }
    } 

3.1.3 BufferedReader

(道具)

装饰了缓冲区的功能,我们可以从缓冲区拿数据可以更快(如果文件不大的话或者缓冲区足够大的话)

实际上,我们在上面写的char[] 就是起到了缓冲区的作用嘛,我们可以看一下BufferedReader的源码实现的效果和我们上面实现的差不多。

默认的缓冲区的大小是 8192 个 Char

而且这个缓冲Reader的水龙头还有包装了 readLine() 的功能。

    public static void readFile(String path){
        File file = new File(path);
        FileReader fileReader = null;
        BufferedReader bufferedReader = null;

        try{
            fileReader = new FileReader(file);
            bufferedReader = new BufferedReader(fileReader); // 为 FileReader 包装一下 增加使用缓冲区的功能。
            String line;
            while((line = bufferedReader.readLine())!=null){
                System.out.println(line);
            }

        }catch(Exception e){
            e.printStackTrace();
        }finally{
            try{
                fileReader.close();
                bufferedReader.close();
            }catch(Exception e){
                e.printStackTrace();
            }
        }
    } 

有人说用bufferReader速度更快,这个要看实际情况,因为在Java 和python的类实现是非常不一样的,现在我也深刻体会到这个问题,我们在python里面会很强调大家尽量有API尽量用API,因为他们的API底层是用C写的,这样运行编译的时候速度会很快的。但是在Java里面,这些功能类的作用实际上都是可以用其他的类来实现的,并不是由更快速的语言编译而实现的,我们定义各种繁多的功能类,只是为了使得大家的代码能够在一定的层次达到相同的规范。

# 附 BufferedReader 的子类:LineNumberReader

    public static void readFile(String path){
        File file = new File(path);
        FileReader fileReader = null;
        //BufferedReader bufferedReader = null;
        LineNumberReader lineNumberReader = null;
        try{
            fileReader = new FileReader(file);
            //bufferedReader = new BufferedReader(fileReader); // 为 FileReader 包装一下 增加使用缓冲区的功能。
            lineNumberReader = new LineNumberReader(fileReader);
            String line;
            while((line = lineNumberReader.readLine())!=null){
                System.out.println(lineNumberReader.getLineNumber()+": "+line);
            }

        }catch(Exception e){
            e.printStackTrace();
        }finally{
            try{
                fileReader.close();
                //bufferedReader.close();
                lineNumberReader.close();
            }catch(Exception e){
                e.printStackTrace();
            }
        }
    }

lineNumberReader 就相当于增加了可以读取行号的功能。

3.1.4 CharArrayReader

(水龙头)
是一个节点对象流(内存到内存),就是一个char[] 的访问器,我们对于这些对象的访问都应该需要访问器,而不是直接使用赋值,观察reader内部的源码,对于线程拥塞这些问题以后可以更好的进行管理。

        CharArrayReader charArrayReader = null;//CharArrayReader 就是一个访问器
        char[] my_array = { 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r','s', 't', 'u', 'v', 'w', 'x', 'y', 'z' };
        char[] out_data = new char[5];
       	charArrayReader.read(out_data);
       	
       	//Method2
       	//char[] out_data = new char[5];
        //charArrayReader.read(out_data,0,5); //从指定位置读取

可以使用mark(0),下一次的reset就会定位到这个位置

            char[] out_data = new char[5];
            charArrayReader.read(out_data);
            charArrayReader.mark(0);

            char[] out_data2 = new char[5];
            charArrayReader.reset();
            charArrayReader.read(out_data2);
            charArrayReader.reset();
            charArrayReader.read(out_data);
利用MATLAB 4f光学系统,在Python中进行弗劳恩霍夫衍射和傅里叶面滤波——用镜头模拟光学图像处理。.zip 1.版本:matlab2014a/2019b/2024b 2.附赠案例数据可直接运行。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。 立即下载

相关推荐

工业互联网工控安全与工业质检AI大模型建设方案.pptx

工业互联网工控安全与工业质检AI大模型建设方案.pptx

java高级流_Java高级之Io流

1.1,什么是io流?流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象。即数据在两设备间的传输称为流,流的本质是数据传输,根据数据传输特性将流抽象为各种类,方便更直观的进行数据操作。1.2,流按类型分为两种:* 字节流 : 字节流可以操作任何数据,因为在计算机中任何数据都是以字节的形式存储的* 字符流 : 字符流只能操作纯字符数据,比较方便。1.2.1,io流的结构图:1.3,I...

weixin_30291543的博客 169

通信行业CentOS 7内核网络栈优化:高并发连接下UDP/TCP性能调优与系统资源管理

内容概要:本文聚焦于CentOS 7系统在通信行业高并发场景下的性能调优实践,重点围绕内核网络栈优化展开,涵盖UDP/TCP缓冲区调整、文件句柄与连接跟踪表扩容、TIME_WAIT状态复用、软中断分布优化及tuned工具的自动化调优。通过具体配置参数和实际案例(如VoIP软交换系统)深入解析各项调优措施的设计原理与实施效果,有效解决高CPS下丢包、连接失败等问题,并展望了向云化、eBPF等动态智能调优方向的发展趋势。; 适合人群:从事通信系统运维、网络开发或Linux系统性能优化的技术人员,具备一定操作系统和网络基础知识,工作经验1年以上的中初级工程师。; 使用场景及目标:①应用于软交换、媒体网关、信令网关等高并发通信设备的系统调优;②解决UDP丢包、conntrack表满、TCP连接队列溢出等典型性能瓶颈;③提升系统在小包高频、低时延要求场景下的稳定性和吞吐能力。; 阅读建议:建议结合实际生产环境或测试平台同步验证文中配置,重点关注参数背后的物理意义(如BDP、softirq、conntrack机制),并配合ss、conntrack、dmesg等命令进行调优前后对比分析,确保安全可控地实施变更。

JAVA小白菜——JAVA基础 IO篇(一):各种IO流的归纳和概述

现在互联网高速发展,大家肯定听过NIO,BIO,AIO各种各样的柳机制。抱着学习的心态,去搞懂IO到底是啥。 IO,I和O,IN和OUT的意思,用作数据的 输入(IN)和输出(OUT),IO是JAVA最早的包之一。 ![在这里插入图片描述](https://img-blog.csdnimg.cn/20200703135134154.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9

qq_40543834的博客 159

2024 《计算机网络》实验教学指导书.doc

2024 《计算机网络》实验教学指导书.doc

不平衡电网下自抗扰顺序模型预测PWM整流器控制仿真模型(Simulink仿真实现)

内容概要:本文围绕面向城市空中交通的多无人机路径规划问题展开研究,提出了一套融合全局规划、动态避障与局部协同调整的综合路径规划方法。研究内容涵盖基于改进RRT算法与图论的全局路径规划、基于动态风险场和动态窗口法(DWA)的模型预测控制实现动态避障,以及基于分布式协同控制的多无人机局部路径协同策略。通过Matlab平台构建仿真环境,在多种典型城市交通场景下对所提方法进行了系统性验证,结果表明该方法在路径安全性、编队稳定性与任务效率方面表现优异。文章还深入探讨了算法的创新点与未来研究方向,为复杂城市环境下多无人机系统的自主协同提供了理论支撑与技术路径。; 适合人群:具备自动化、控制理论、计算机科学或相关领域基础知识,从事无人机系统、智能交通、路径规划、多智能体协同控制等方向研究的研究生、科研人员及工程技术人员。; 使用场景及目标:①为城市空中交通系统中的多无人机安全、高效飞行提供可靠的路径规划解决方案;②支持在复杂、动态的城市场景中开展无人机自主导航、编队飞行与协同控制的技术研究与仿真验证。; 阅读建议:建议结合提供的Matlab代码进行实践操作,重点关注算法的具体实现细节、参数配置对性能的影响以及不同仿真场景下的实验设计,以深入理解各模块的集成逻辑与实际应用效果。

某厂大咖花一周整的 Java 八股文面试题,小白菜学了也能快速进大厂

最近面试的小伙伴很多,对此我整理了一份Java面试题手册:基础知识、JavaOOP、Java集合/泛型面试题、Java异常面试题、Java中的IO与NIO面试题、Java反射、Java序列化、Java注解、多线程&并发、JVM、Mysql、Redis、Memcached、MongoDB、Spring、SpringBoot、SpringCloud、RabbitMQ、Dubbo、MyBatis、ZooKeeper、数据结构、算法、Elasticsearch、Kafka、微服务、Linux等等。...

m0_67322837的博客 305

【选址和定容】模拟退火改进多目标粒子群算法在分布式电源选址和定容中的应用【IEEE69节点】(Matlab代码实现)

内容概要:本文研究了模拟退火改进多目标粒子群算法在分布式电源选址和定容中的应用,以IEEE69节点配电系统为算例进行仿真分析。通过融合模拟退火算法的强全局搜索能力与粒子群算法的高效局部收敛特性,构建了一种改进的多目标优化算法,用于解决分布式电源在配电网中的最优位置选择与容量配置问题。研究旨在实现多重优化目标,包括最小化网络有功损耗、提升节点电压质量、增强系统运行的经济性与稳定性。文中详细阐述了多目标优化模型的数学构建、算法的改进机制与实现流程,并基于Matlab平台完成了算法编程与仿真验证,结果表明所提方法在求解质量和收敛性能上均优于传统算法。; 适合人群:具备电力系统分析、优化理论基础及Matlab编程能力,从事配电网规划、分布式能源系统优化、智能优化算法应用等相关领域的科研人员、工程师以及高校研究生。; 使用场景及目标:①解决高比例分布式电源接入背景下配电网的科学规划问题;②为新型电力系统中源网协调设计提供有效的优化工具;③为相关领域的科研工作提供可复现、可拓展的算法模型与仿真代码实例,支持进一步的算法对比与功能升级。; 阅读建议:建议读者结合提供的Matlab代码与IEEE69节点标准数据,动手复现实验结果,深入理解算法的参数设置、迭代过程与多目标折衷分析方法,并可根据实际研究需求修改目标函数或引入新的约束条件以适应不同的应用场景。

小白菜快速上手 Docker

本文针对Java1234网站视频快速上手Docker视频学习一步步安装使用Docker的记录。 本人会记录下Docker初学时的各种操作步骤,全干饭,无水份。 1. 开发环境: CentOS7 2. 远程连接工具:FinalShell (国内某大神开发的远程链接工具,非常值得推荐) SSH工具 客户端 3. 检查Linux的版本号,需要3.10以上版本。 uname -r 4. 切换到 root 账号下 , 如果不在root账号下,请使用 su 命令自行切换。 ...

u012813129的博客 271

编译CycloneDDS和CycloneDDS-CXX踩过的坑——CMake Error at CMakeLists.txt:227 (find_package):

最近编译CycloneDDS和CycloneDDS-CXX踩了两个坑,花了不少时间。做个简单的记录,免得以后又踩到。注意:CycloneDDS-CXX编译依赖CycloneDDS,因此必须先编译CycloneDDS需要严格按照步骤进行,否则要入坑步骤如下,1先编译CycloneDDS以上步骤完成CycloneDDS的编译和安装,生成的bin include lib等位于install目录下面。

usstmiracle的博客 1900

UE5网络同步优化:GetLifetimeReplicatedProps高级应用指南

本文深入探讨了UE5中GetLifetimeReplicatedProps函数的高级应用与优化策略。文章超越了基础变量注册,重点阐述了如何通过精细的复制条件控制、频率管理及分层复制机制,构建高效的数据同步通道,从而优化网络带宽与游戏性能,是提升多人游戏体验的实用指南。

weixin_29007243的博客 533

UVA355 JAVA版 The Bases Are Loaded

自我标记:异常处理try-catch的初尝试 辣鸡小玲的代码 UVA355 The Bases Are Loaded 算法来自于小白菜又菜的C版 AC的代码就长这样:完完全全的C语言,有点丑 import java.util.Scanner; import java.util.*; public class Main { public static int ctoi(char ch) { ...

VagetableOfPeng的博客 358

【水下小目标检测】SWIPENet与样本重加权:应对模糊与噪声的深度学习策略

本文深入探讨了水下小目标检测的挑战与解决方案,重点介绍了SWIPENet网络架构与IMA样本重加权算法。通过空洞卷积模块、特征金字塔重构和多尺度预测机制,SWIPENet有效提升了模糊目标的检测精度。结合Invert Multi-Class Adaboost算法,系统性地解决了水下环境中的样本不均衡问题,在URPC数据集上实现了48.8%的mAP,特别适合海洋生物检测等应用场景。

weixin_29057163的博客 342

简单登陆注册功能实现 连接数据库 控制台方式 源码

基本流程:用户输入用户名和密码注册,在数据库查找用户名是否重复,验证用户名和密码是否符合标准,数据库存储用户名明文,密码使用md5加密算法密文存储;在登陆中,我们首先在数据库中验证用户和密码是否正确。 Java小白菜的练手项目,没有技术量,其中我的知识盲点包括以下几个方面: 1、说是简单登陆注册功能接口,但是什么都没说,包含什么框架、有什么需求、要什么样子的。 后来我选择了c/c++最常用的控制台操作打印,因为我不会写前端页面,也没有参与过这类的项目 2、公司用的是...

obitosbb的博客 617

python——模拟砍价

类型:随机数。

m0_62488776的博客 1970

从原理图到PCB:手把手教你绘制DRV8301驱动板(附完整代码与避坑指南)

本文详细介绍了如何从原理图设计到PCB布局,手把手教你绘制DRV8301驱动板,特别适用于FOC(磁场定向控制)系统开发。内容涵盖元器件选型、电源树架构设计、栅极驱动电路、PCB布局技巧、焊接调试及代码配置,并附有完整代码与常见问题避坑指南,帮助工程师快速掌握DRV8301驱动板的设计与优化。

weixin_33716941的博客 394

JavaWeb——Session的前后端交互(简洁代码)

JAVA程序代码: import javax.servlet.*; import java.io.Exception; @WebServlet("/session") public class SessionDemo extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws Exception { //使用session共享

木心小白菜的博客 763

【VisualStdio】手把手教你做一个上位机(1)控件设计布局

网上有很多形形色色的制作上位机教程,有些写的挺好的,但是过于单调。

m0_73409202的博客 5435

三天打渔,两天

欢迎浏览新人不吃葱花香菜的小白菜的博客 注册优快云也有一段时间了,但是对这个的关注却很少,这次也刚好是一个逼自己锻炼的机会。希望可以通过自己的博客来记录自己的“成长历程”! 题目: 中国有句俗语叫“三天打鱼两天晒网”。某人从2010年1月1日起开始“三天打鱼两天晒网”,问这个人在以后的某一天中是“打鱼”还是“晒网”。用C或C++语言/java/python实现程序解决问题。 要求: ...

小白菜 410

手把手教你学simulink(26.8)--控制算法场景示例:基于强化学习的无人机姿态稳定控制系统

首先,我们需要定义无人机的姿态稳定控制环境。环境包括无人机的状态(姿态角、角速度等)和动作(电机转速)。我们还需要定义奖励函数,用于评估控制器的表现。matlab深色版本% 定义环境% 定义状态空间% 12个状态变量% 定义动作空间% 电机转速范围奖励函数用于评估控制器的表现。我们可以根据无人机的姿态误差、角速度误差以及控制输入的变化率来设计奖励函数。具体来说,当无人机的姿态接近设定值时,给予正奖励;当姿态误差较大或控制输入变化剧烈时,给予负奖励。matlab深色版本。

MHD0815的博客 494

STC单片机使用FatFs文件系统读取SD卡指定文件内容

STC单片机使用FatFs文件系统读取SD卡指定文件内容

perseverance51博客 2744

spring 学习

ioc ioc容器就是一个生产和管理bean的容器,原本我们需要在调用类中new的东西,交给ioc就可以了。

qq_34770694的博客 233

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

第一个MyBatis的CURD,别名,日志,分页

MyBatis 1.什么是MyBatis? 前身:MyBatis 本是apache的一个开源项目iBatis 未来我们编写代码的时候,导入包的时候,ibatis; MyBatis:需要在 Github 上下载! GitHub地址:https://github.com/mybatis/mybatis-3 当前,最新版本是MyBatis 3.5.4 ,其发布时间是2020年2月4日。 官网地址:ht...

weixin_45127932的博客 217

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

从事c++一年的感悟

@TOC 坐标成都,2019/6/29 目的 写这片文章的目的是为了纪念一下这个我觉的有意义的时间点。开始也从一个只知道窃取网上免费知识成果的一颗小白菜,渐变成了学会了学习,总结技能的老白菜吧。 为什么会从事c++开发 先讲讲在众多语言中,为什么我会选择了c++吧。各位观众,容我慢慢道来吧。 大学大专信息管理专业,计算机系,学习了一学期的c语言,成果就是打印了一个倒着的杨辉三角;大一大二学习了...

manxi6801的博客 418

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

客户端渲染与服务端渲染

本人是前端小白菜,最近在苦学前端,做点自己的学习小总结。欢迎各位大佬纠错。 模版引擎原来一开始是后端使用的,后来才慢慢支持前端,听起来很高大上的模版引擎,什么页面渲染,我不喜欢这么专业的难懂的叫法,所以我要自己亲自总结一下。 服务端渲染 模版引擎不关心内容,只关心自己能识别的模版语法,比如art-template只识别 {{ }} 这种胡须语法块,在读取HTML静态页面的时候,其实就是读取一大串字符串,然后在字符串之间夹着 {{ name }} , {{ if sex !==‘male’ }} , {{

whiteBearClimb的博客 346
上一篇: 【考研计网:基础版】第三章:数据链路层
下一篇: CRC 循环冗余校验原理 Python 实现
JintuZheng
博客等级 码龄11年 1483粉丝 109原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值