Java中IO流的设计模式

基于STM32与HRTIM的四开关Buck-Boost双向DC-DC电源设计实战(附源码、仿真与设计解析) 本文详细介绍了基于STM32F334的HRTIM高分辨率定时器实现四开关Buck-Boost双向DC-DC电源的设计实战。通过精准的PWM控制、双环PID算法和智能模式切换逻辑,解决了电压震荡与效率优化等关键问题,并提供了完整的源码、PSIM仿真及参数计算,为高性能电源设计提供了实用参考。 阅读详情

IO流中的装饰者设计模式

缓冲流装饰者模式

package com.cloud.day4;

import java.io.BufferedReader;

import java.io.File;

import java.io.FileReader;

import java.io.IOException;

import java.io.Reader;

/*

装饰者设计模式:增强一个类的功能,而且还可以让这些装饰类互相装饰。

BufferedReader拓展了FileReader的功能。

BuferedWriter 拓展了FileWriter的功能。


需求1:编写一个类拓展BufferedReader的功能,增强readLine方法返回的字符串带有行号。

需求2:编写一个类拓展BufferedReader的功能,增强readLine方法返回的字符串带有分号。

需求3:编写一个类拓展BufferedReader的功能,增强readLine方法返回的字符串带有双引号。

需求4:编写一个类拓展BufferedReader的功能,增强readLine方法返回的字符串带有行号+ 分号。

需求5:编写一个类拓展BufferedReader的功能,增强readLine方法返回的字符串带有分号+ 双引号。

需求6:编写一个类拓展BufferedReader的功能,增强readLine方法返回的字符串带有双引号+ 行号。

需求7:编写一个类拓展BufferedReader的功能,增强readLine方法返回的字符串带有行号+ 分号+双引号。


----| Reader

-----------| BufferedReader

---------------| BufferedLineNum  带行号

---------------| BufferedSemi    带分号

---------------| BufferedQuto   带双引

---------------| 子类..

---------------|

增强一个类的功能时候我们可以选择使用继承:

   通过继承实现增强一个类的功能优点:   代码结构清晰,通俗易懂。

   缺点:使用不灵活,会导致继承的体系过于庞大。

*/

class BufferedLineNum extends BufferedReader{

   int count = 1;

   public BufferedLineNum(Reader in){

      super(in);

   }

   @Override

   public String readLine() throws IOException {

      String line = super.readLine();

      if(line==null){

        return null;

      }

      line = count+" "+line;

      count++;

      return line;

   }

}

//带分号的缓冲输入字符流

class BufferedSemi extends BufferedReader{

   public BufferedSemi(Reader in) {

      super(in);

   }

   @Override

   public String readLine() throws IOException {

      String line = super.readLine();

      if(line==null){

        return null;

      }

      line = line+";";

      return line;

   }

}

//带双引号的缓冲输入字符流

class BufferedQuto extends BufferedReader{

   public BufferedQuto(Reader in) {

      super(in);

   }

   @Override

   public String readLine() throws IOException {

      String line = super.readLine();

      if(line == null){

        return null;

      }

      line = "\""+line+"\"";

      return line;

   }

}

public class Demo1 {

   public static void main(String[] args) throws IOException {

      File file = new File("F:\\a.txt");

      FileReader fileReader = new FileReader(file);

      //建立带行号的缓冲输入字符流

      BufferedLineNum bufferedLineNum = new BufferedLineNum(fileReader);

      //建立带分号的缓冲输入字符流

      BufferedSemi bufferedSemi = new BufferedSemi(fileReader);

      //建立带引号的缓冲输入字符流

      BufferedQuto bufferedQuto = new BufferedQuto(fileReader);

      String line = null;

      while((line = bufferedQuto.readLine())!=null){

        System.out.println(line);

      }

   }

}

字符流装饰者模式

package com.cloud.day4;

/*

装饰者设计模式:增强一个类的功能,而且还可以让这些装饰类互相装饰。

装饰者设计模式的步骤:

   1. 在装饰类的内部维护一个被装饰类的引用。

   2. 让装饰类有一个共同的父类或者是父接口。


需求1:编写一个类拓展BufferedReader的功能,增强readLine方法返回的字符串带有行号。

 需求2:编写一个类拓展BufferedReader的功能,增强readLine方法返回的字符串带有分号。

 需求3:编写一个类拓展BufferedReader的功能,增强readLine方法返回的字符串带有双引号。

 需求4:编写一个类拓展BufferedReader的功能,增强readLine方法返回的字符串带有行号+ 分号。

 需求5:编写一个类拓展BufferedReader的功能,增强readLine方法返回的字符串带有分号+ 双引号。

 需求6:编写一个类拓展BufferedReader的功能,增强readLine方法返回的字符串带有双引号+ 行号。

 需求7:编写一个类拓展BufferedReader的功能,增强readLine方法返回的字符串带有行号+ 分号+双引号。


继承实现的增强类和修饰模式实现的增强类有何区别?

   继承实现的增强类:

      优点:代码结构清晰,而且实现简单.

      缺点:对于每一个的需要增强的类都要创建具体的子类来帮助其增强,这样会导致继承体系过于庞大。

修饰模式实现的增强类:

      优点:内部可以通过多态技术对多个需要增强的类进行增强,可以是这些装饰类达到互相装饰的效果。使用比较灵活。     

      缺点:需要内部通过多态技术维护需要被增强的类的实例。进而使得代码稍微复杂。

*/

import java.io.BufferedReader;

import java.io.File;

import java.io.FileReader;

import java.io.IOException;

//带行号的缓冲输入字符流

class BufferedLineNum2 extends BufferedReader{

   //内部维护一个被装饰类的引用

   BufferedReader bufferedReader ;

   int count = 1;

   public BufferedLineNum2(BufferedReader bufferedReader) {

      super(bufferedReader);

      this.bufferedReader = bufferedReader;

   }

   public String readLine() throws IOException{

      String line = bufferedReader.readLine();

      if(line == null){

        return null;

      }

      line = count+" "+line;

      return line;

   }

}

//带分号缓冲输入字符流

class BufferedLineSemi2 extends BufferedReader{

   //内部维护一个被装饰类的引用

   BufferedReader bufferedReader ;

   int count = 1;

   public BufferedLineSemi2(BufferedReader bufferedReader) {

      super(bufferedReader);

      this.bufferedReader = bufferedReader;

   }

   public String readLine() throws IOException{

      String line = bufferedReader.readLine();

      if(line == null){

        return null;

      }

      line = line+";";

      return line;

   }

}

//缓冲类带双引号

class BufferedQuto2 extends BufferedReader{

  

   //在内部维护一个被装饰的类

   BufferedReader bufferedReader;

  

   public BufferedQuto2(BufferedReader bufferedReader){  //new  BufferedSemi2();

      super(bufferedReader) ; //只是为了让代码不报错..

      this.bufferedReader = bufferedReader;

   }

  

   public String readLine() throws IOException{

      String line = bufferedReader.readLine();

      if(line==null){

        return null;

      }

      line = "\""+line +"\"";

      return line;

   }

}

public class Demo2 {

   public static void main(String[] args) throws IOException {

      File file = new File("F:\\a.txt");

      FileReader fileReader = new FileReader(file);

      BufferedReader bufferedReader = new BufferedReader(fileReader);

      BufferedLineNum2 bufferedLineNum2 = new BufferedLineNum2(bufferedReader);

      bufferedLineNum2.readLine();

      String line = null;

      while((line = bufferedLineNum2.readLine())!=null){

        System.out.println(line);

      }

   }

}

 

案例

package com.cloud.day4;

/*练习:

一家三口每个人都会工作,儿子的工作就是画画,母亲的工作就是在儿子的基础上做一个增强,不单止可以画画,还可以上涂料。

爸爸的工作就是在妈妈基础上做了增强,就是上画框。

*/

 

interface Work{

   public void work();

}

class Son implements Work{

   @Override

   public void work() {

      System.out.println("画画...");

   }

}

class Mother implements Work{

   Work worker;

   public Mother(Work worker){

      worker.work();

      this.worker = worker;

   }

   @Override

   public void work() {

      System.out.println("填色...");

   }

}

class Father implements Work{

   Work worker;

   public Father(Work worker){

      worker.work();

      this.worker = worker;

   }

   @Override

   public void work() {

      System.out.println("打包封装...");

   }

}

public class Demo3 {

   public static void main(String[] args) {

      Son son = new Son();

      Mother m = new Mother(son);

      Father f = new Father(m);

      f.work();

   }

}

树莓派5搭建ROS1开发环境:从系统安装到环境变量配置 本文详细指导如何在树莓派5上搭建ROS1开发环境。针对树莓派OS非标准安装路径导致的常见CMake报错问题,提供了从系统烧录、一键安装ROS到关键环境变量配置的完整解决方案,确保工作空间能成功编译,助力机器人项目开发。 阅读详情

相关推荐

Fluent温度超限调试:从能量方程到网格优化的实战指南

本文深入解析Fluent中温度超限问题的诊断与解决方法,从能量方程机制到网格优化策略,提供实战指南。通过分析温度与焓的换算关系,探讨典型场景如能量方程发散、局部网格质量差等,并给出五步调试法及高级命令应用,帮助工程师有效解决温度计算异常问题。

weixin_29045585的博客 530

java中IO流用到了哪种设计模式

适配器模式: 由于InputStream是字节流不能享受到字符流读取字符那么便捷的功能,因此借助 InputStreamReader将其转为Reader子类,因此可以拥有便捷操作文本文件方法。 装饰者模式: 将InputStream字节流包装为BufferedReader过程就装饰的过程,一开始 InputStream只有read一个字节的方法,包装为Reader之后拥有read一个字符的功能,在...

weixin_45151960的博客 2083

猫耳语音下载(mediadown)

西宾猫耳语音下载工具,能够帮助你下载猫耳音频节目。如果你是会员,它还能帮你下载会员节目。

new_stranger的专栏 2491

Java IO模型详解

主要对于Java IO模型的详细介绍

m0_53067943的博客 1540

lammps建模(电解液)opls-aa力场的基本流程

lammps建模(电解液)opls-aa力场的基本流程

syj0922的博客 2133

WSOLA原理及matlab仿真

WSOLA原理 对于 OLA 算法来说,常常无法保持原信号中的周期性结构,在帧裁剪的过程中,不能保证每一个帧都能覆盖完整周期并保证其相位对齐,会产生相位跳跃失真。 为保证**基频不变**,就要使用 WSOLA 算法。 WSOLA 并不直接在 Ha 处找一帧进行直接拼接,而是在一个区间内寻找与理想帧最接近的一帧进行叠加。 ![在这里插入图片描述](https://img-blog.csdnimg.cn/8a234f4fde104fc69a9f3ddb7bcf3014.png?x-oss-process=ima

ManiacLook的博客 3214

io模型

前言 I/O 一直是很多小伙伴难以理解的一个知识点,这篇文章我会将我所理解的 I/O 讲给你听,希望可以对你有所帮助。 I/O 何为 I/O? I/O(Input/Outpu) 即输入/输出。 我们先从计算机结构的角度来解读一下 I/O。 根据冯.诺依曼结构,计算机结构分为 5 大部分:运算器、控制器、存储器、输入设备、输出设备。 冯诺依曼体系结构 输入设备(比如键盘)和输出设备(比如鼠标)都属于外部设备。网卡、硬盘这种既可以属于输入设备,也可以属于输出设备。 输入设备向计算机输入数.

weixin_41367613的博客 377

基于转录逆转的药物重定向 GPS 模型

GPS是一个基于分子结构预测基因表达扰动的开源平台,由三个模块组成:RCL(在LINCS扰动数据上训练抗噪MLP)、GPS4Drugs(预测新化合物的基因表达谱并进行逆转评分)、MolSearch(基于MCTS的分子优化)。平台使用Morgan指纹和Gene Ontology注释作为特征输入,将基因表达扰动离散为三分类标签。训练数据来自LINCS Phase I的18,746个化合物和978个landmark基因,支持四细胞系独立训练,可用于药物重定向与化合物筛选。

听雨草堂 83

Java 四种主要的 IO 模型

不同的IO模型在处理并发IO请求时有各自的特点和适用场景。阻塞IO模型简单易用,但在高并发情况下性能较差。非阻塞IO模型通过轮询IO状态来实现并发处理,适用于中等并发场景。IO多路复用模型通过select、poll、epoll等机制实现高并发处理。异步IO模型通过回调函数实现高并发处理,性能最佳。

qq_45607784的博客 1778

RK3399驱动开发 | 19 - 阿美林7寸mipi屏幕调试(基于linux4.4.194内核)

NULL

Mculover666的博客(嵌入式) 2661

华为OD新系统机试真题 - 操作历史管理器的撤销/重做能力

华为OD机试新系统真题【操作历史管理器的撤销/重做能力】,提供C语言、Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解,以及在线OJ模拟做题。华为OD机试真题【操作历史管理器的撤销/重做能力】

qq_45776114的博客 864

Java基础之IO模型

面试喜欢问的操作系统问题:BIO,NIO,AIO

qq_40492693的博客 2342

华为OD新系统机试真题 4.26 -最大化游戏试玩资格分发

华为OD机试新系统真题【最大化游戏试玩资格分发】,提供C语言、Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解,以及在线OJ模拟做题。华为OD新系统机试 4月26号真题【最大化游戏试玩资格分发】。

qq_45776114的博客 825

java io流 设计模式_JAVA--IO--4--java io流中涉及的设计模式

java io流中涉及的设计模式介绍先看一段代码,查看其中涉及到的模式public void testInputStreamReader() throws Exception {private static final String SEPARATOR = File.separator;File file = new File("e:" + SEPARATOR + "io" + SEPARATOR...

weixin_39559079的博客 442

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

java io流中涉及的设计模式

java io流中涉及的设计模式介绍先看一段代码,查看其中涉及到的模式public void testInputStreamReader() throws Exception { private static final String SEPARATOR = File.separator; File file = new File("e:" + SEPARATOR + "io" + S

小白成长记录 9139

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

Java IO流及装饰者设计模式学习笔记

1、IO流基本概念 IO流及输入输出流,常用可分为两大类:字节流、字符流。 区别与应用场景:字节流在处理出入输出时不会用到缓存,而字符流用到了缓存。字符流用来处理单个字节无法表示的内容。 字符流原理:若干字节->解码方式->解码->索引字符集->字符。 2、IO类设计模式与设计原理 IO类在设计时采用了装饰者设计模式(Decorator),主要通过抽象装饰者类来实现。 2.1、装饰者设计模式 定义及优点:在不改变原有对象的基础之上,将功能附加到对象上。使用不同装饰类以及

三水的博客 323

java IO流 [缓冲技术] [装饰设计模式]

------- android培训、java培训、期待与您交流!   ----------   IO流流的分类字符流的由来乱码的出现读写流流的读写操作WriterReader缓冲技术IO异常装饰设计模式InputStreamReader IO流            IO流---input 和 output 的简写,用来处理设备之间的数据传输 如内存 硬盘 网络等

VIPGuiBin的专栏 7973

java io流 装饰流_Java中IO流中的装饰设计模式(BufferReader的原理)

本文粗略的介绍下JavaIO的整体框架,重在解释BufferReader/BufferWriter的演变过程和原理(对应的设计模式)一.JavaIO的简介流按操作数据分为两种:字节流与字符流.流按流向分为:输入流(读),输出流(写)。字符流由来就是:早期的字节流+编码表,为了更便于操作文字数据。记住:只要是操作字符数据,应该优先使用字符流。字节流的抽象基类:InputStream ,OutputS...

weixin_29471541的博客 338

Java中IO流中的装饰设计模式(BufferReader的原理)

本文粗略的介绍下JavaIO的整体框架,重在解释BufferReader/BufferWriter的演变过程和原理(对应的设计模式) 一.JavaIO的简介 流按操作数据分为两种:字节流与字符流. 流按流向分为:输入流(读),输出流(写)。 字符流由来就是:早期的字节流+编码表,为了更便于操作文字数据。 记住:只要是操作字符数据,应该优先使用字符流。 字节流的抽象基类:In...

kqixiang945的专栏 947

java io 流 设计模式

三 装饰模式的应用 学过装饰模式后,大家会发现,它在Java语言中最著名的应用莫过于Java I/O标准为库的设计了。这一节将以处理Byte流为例,看看装饰模式是怎样得到应用的。 为什么不用继承而用装饰模式 我们知道Java I/O库需要很多性能的各种组合,如果说这些性能的组合是通过继承方式来实现的话,那么每一种组合都需要一个类,这样就会出现大量重复性问题的出现,从而使类数目“爆炸

因为了解所以无知 1万+

Java基础21--IO流--装饰设计模式--缓冲流

21-1,IO练习-将c盘的一个文本文件复制到d盘。 将c盘的文件读取,再将读取到的文件写到d盘。 思路: (1)需要读取源。 (2)将读到的源数据写入到目的地。 (3)既然是操作文本数据,就使用字符流。

您已进入防沉迷系统... 1228

java io流 设计模式_简单总结:以设计模式的角度总结Java基本IO流

在总结 Java Basic IO 时,发现 java.io 包的相关类真心不少~~。看到一堆“排山倒海”般的类,我想,唯有英雄联盟中小炮的台词才能表现此刻我的心情:跌倒了没?崩溃了没?学 Java 的,学过装饰者模式一般都知道一个典型的应用:Java 的基本 IO 使用了装饰者模式(更多的 JDK 中使用的设计模式,请点我)。也因此知道了为什么 io 包里为什么会有这么多的类~~,引用《Head...

weixin_42366533的博客 345

黑马程序员——Java基础——IO流、字符流、字节流、缓冲区技术、装饰设计模式、LineNumberReader等

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------  一、IO流概述       1、概述          IO流:(Input Output Stream)       2、特点         1) IO流用来处理设备间的数据传输

lifeoflive521的专栏 817

Java 装饰器模式源码解析 IO 流库中的设计模式应用

微服务数据一致性方案 最终一致性与事务补偿机制

nSwe9Z3s2的博客 602

史上最全1000道Java高频面试题:集合、IO流、多线程、网络、算法、Git、设计模式、springboot

话不多说上干货 这份资料包括: IDEA、Java语法、面向对象、异常、常用类、集合、IO流、多线程、网络编程、JUnit、枚举、注解、反射机制、CSS、HTML、JavaScript、JQuery、ajax、Javaweb、MySQL、JavaEE、SSM框架、springboot、算法、Git、maven、Linux、设计模式、多线程与高并发、视频教程、视频源码、实战项目、电子书、简历模板、高频面试题等等资源。 资料目录 —————————————————————————————— 开发手.

一入Java深似海 552
上一篇: Java中JDBC的PreparedStatement用法
下一篇: Java中JDBC的事务问题
午-夜
博客等级 码龄12年 95粉丝 133原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值