Java流系列(七):其它

Java:Stream流 阅读详情

一、writer.flush()和writer.close()的区别

  • 相同点:都会刷新缓冲区
  • 不同点:
    • A:flush()只刷新缓冲区,close()先刷新缓冲区然后关闭流.
    • B:flush()刷新缓冲区后可以继续写入数据继续刷新缓冲区;close()关闭流后就无法继续写入数据了,否则报流已经关闭异常.

二、编码:将字符数据转换成字节数据的过程

1、如果没有指定编码表,则默认使用本地编码表,当前是中文环境,所以使用的GBK编码表

byte[] data=str.getBytes();

2、手工指定编码表

byte[] data=str.getBytes("gbk");

解码:将字节数据还原成字符数据的过程

String(byte[] bytes)
String decodeInfo=new String(data);
手工指定解码的编码表
String decodeInfo=new String(data,"UTF-8");

三、装饰者模式

1、装饰和继承。
  • 装饰设计模式是一种解决某一类问题的思想。该类问题的有效解决方案。解决给类提供增强型功能的问题。
  • 继承:是面向对象的特征之一。
Writer
	|--TextWriter
	|--MediaWirter

该体系的出现已经可以完成对文本数据和媒体数据的写操作。但是发现。效率较低。为了提高效率,就加入了缓冲技术。
文本写入需要缓冲
媒体写入需要缓冲

按照面向对象的思想,为了提高扩展,通过继承的方式完成。

Writer
	|--TextWriter
		|--BufferedTextWriter		
	|--MediaWirter
		|--BufferedMedieWriter

这就完成了文本和媒体数据写操作效率提高。

当然如果该体系加入一个子类BaseWriter,而且该子类也许要效率提高。

Writer
	|--TextWriter
		|--BufferedTextWriter		
	|--MediaWirter
		|--BufferedMedieWriter
	|--BaseWriter
		|--BufferedBaseWriter

如果体系扩展,都需要定义一个该子类具备高效缓冲功能的子类。这样体系扩展很麻烦。

如何把这个体系出现问题解决一下,并优化一下呢?

我们发现,这些子类使用的缓冲技术都是一样的。
缓冲区其实就是定义了临时存储容器将数据进行临时缓冲,至于具体的写操作,还是Writer的子类对象完成的,比如 TextWriter. MediaWriter等。

既然这样,可以将缓冲技术单独封装成一个对象,
要对哪个具体对象进行缓冲技术的使用,只要将该对象传递给缓冲区对象即可。

//对缓冲区对象进行单独描述。
class BufferedWriter extends Writer{
	BufferedWriter(Writer w){
	}
//	BufferedWriter(TextWriter tw)
//	{}
//	BufferedWriter(MediaWriter dw)
//	{}
}

当缓冲技术单独封装成了对象后,它具备的还是写功能,只不过可以其他对象的写功能进行高效。所以它还是Writer类中的一员。

所以这时体系变成了

Writer
	|--TextWriter
	|--MediaWirter
	|--BufferedWriter:这是一个提供增强功能的类。就把这种优化方式,定义成一种最终的解决该问题的解决方案并起个名字:装饰设计模式。

和原来的体系,变的很清爽。

Writer
	|--TextWriter
		|--BufferedTextWriter		
	|--MediaWirter
		|--BufferedMedieWriter

装饰设计模式的出现可以对一组类进行功能的增强。
而且装饰类本事也是该体系中的一个子类。

代码体现:
通常情况下,装饰类一般不单独存在。都是通过构造函数接收被装饰的对象。基于被装饰的对象的功能,并对外提供增强行的功能。

和继承的区别:
继承会让体系变得臃肿,装饰更为灵活。

在IO中装饰设计模式用的很多。
比如:

BufferedWriter
BufferedReader
*/
class  
{
	public static void main(String[] args) 
	{
		System.out.println("Hello World!");
	}
}

四、重定向

(一)、重定向输入
1、默认情况下,System.in返回的输入流对应的输入设备是用户键盘.
InputStream rawInputStream=System.in;

2、实例化扫码器对象并指定输入流对象
Scanner scanner=new Scanner(rawInputStream);
do{
    System.out.print("请从键盘输入信息:");
    String content=scanner.next();
    if("quit".equals(content)){
        break;
    }
    System.out.println("content="+content);
}while(true);
String path="src"+File.separator+"com"+File.separator+"hsj"+File.separator+"client"+File.separator+"ByteArrayStreamDemo01.java";
try {
    3、实例化文件输入流对象并指定文件路径
    FileInputStream fileInputStream=new FileInputStream(path);
    System.setIn(fileInputStream);//重定向输入
    4、实例化扫码器对象并指定输入源对象
    scanner=new Scanner(System.in);//此时的System.in对应着文件输入流对象
    scanner.useDelimiter("\n");//默认分隔符是空格,不满足要求,我需要手工将分隔符改成换行符才能符合要求.
    while(scanner.hasNext()){
        String content=scanner.next();
        System.out.println(content);
    }
    5、将输入流重新定向到用户键盘
    System.setIn(rawInputStream);
    scanner=new Scanner(System.in);
    do{
        System.out.print("请从键盘输入信息:");
        String content=scanner.next();
        if("quit".equals(content)){
        break;
    }
    System.out.println("content="+content);
}while(true);
(二)、重定向输出
PrintStream out=System.out;//默认情况下,System.out对应的输出设备是控制台
out.println("你好,世界!");

PrintStream printStream=new PrintStream("hsj.bak");
System.setOut(printStream);//重定向输出
for(int i=0;i<=65535;i++){
    System.out.print((char)i+" ");
    if(i%80==0){
        System.out.println();
    }
}

System.setOut(out);//重新将输出设备定位到控制台
System.out.println("我有回来了!");

五、序列化

如果不想让那些字段参与对象的序列化有两种方式:
A:在遍历的前面加上transient关键字
B:将不需要参与序列化的成员变量静态化.

关于三维全波电磁场仿真软件CST的安装和问题解决 百度网盘链接:https://pan.baidu.com/s/1RgWr8Qau1EzSOlh29SewFQ提取码:fzza这里是2023版本的CST,需要其他版本的uu们可以去官网或者其他人的网盘下载。 阅读详情

相关推荐

IAR调试CC1310的错误:Fatal error:Failed to connect to the XDS emlulator (Error -241 @ 0x0:)

从simplelink_cc13x0_sdk_2_10_00_36导入collector工程后,rebuild后进行debug,出现了如图错误:Fatal error:Failed to connect to the XDS emlulator (connect ICEPick)...(Error -241 @ 0x0)A router subpath could not be accessed....

qq_40417648的博客 6228

writer.flush_Java Writer flush()方法与示例

writer.flush Writer类flush()方法 (Writer Class flush() method) flush() method is available in java.io package. flush()方法在java.io包中可用。 flush() method is used to flush this Writer stream. When the stream...

cumt30111的博客 5490

粒子滤波在基于误差状态量的INS/GNSS组合导航中的使用技巧-On Particle Filter based Error-State INS/GNSS Intergrated Navigation

本文面向以15维惯导(INS)误差为状态量,3维位置误差为量测量的INS/GNSS组合导航系统,​在西工大严恭敏老师的开源工具箱中PF相关库函数基础上实现基于粒子滤波(PF)的惯导误差状态量的递推估计,设计了粒子重置环节并强调了其在本特定场景下的重要性。

I33D33I的博客 1742

java io flush_Java Writer flush()方法

Java Writer flush()方法java.io.Writer.flush()刷新流。如果流已经储存了从各个write()方法在一个缓冲区方法中的任何字符,立即写入到的目的地。然后,如果该目标是另一个字符或字节流刷新。因此,flush()调用将刷新所有缓冲区链中写入和OutputStreams。1 语法public abstract void flush()2 参数无3 返回值返回tru...

weixin_35953060的博客 890

Mediapipe手势识别实战——基于关节角度计算实现动态手势分类

本文详细介绍了如何利用Mediapipe进行手势识别,通过计算手指关节弯曲角度实现动态手势分类。文章从基础原理出发,讲解了关节角度计算的数学方法,并提供了Python实现代码。同时,还分享了数字手势和OK手势的识别实战经验,以及性能优化和工程实践中的关键技巧,帮助开发者快速掌握实时手势识别技术。

weixin_26891599的博客 403

字符集的选择

字符集的选择 一:背景介绍 DICOM特定字符集(0008,0005) 此标签获得不同的值就代表使用不同的语言进行解码。 以下为多家CT厂商的(0008,0005)取值: 字符集: unicode是字符集,ASCII、GB2312、GBK、GB18030既是字符集也是编码方式,UTF-8只是编码方式。 二:中文字符集介绍 世界通用字符集——UTF 中文字符集——GB2312、GBK、GB18030 字符集的详细介绍 一:UTF-8 程序是把一个字节一个字节的来读取,然后再根据字节中开头的bit

qq_41972968的博客 1520

writer.flush(bos,true);与writer.flush(bos);的区别

方法会将当前行的数据写入缓冲区中,并立即将数据写入输出流中。这样可以确保数据的完整性,但是可能会增加写入输出流的次数,降低写入效率。方法只会将当前行的数据写入缓冲区中,而不会立即将数据写入输出流中。这样可以减少写入输出流的次数,提高写入效率。如果您需要更好的数据完整性,可以使用。因此,如果您需要更高的写入效率,可以使用。对象的流,但是它们有一个不同的参数。

JSUITDLWXL的博客 692

一种低照度目标检测新策略:IAT集成YOLOv8实现暗光与雾霾环境下的性能优化【附核心实战代码】

随着深度学习和计算机视觉的快速发展,目标检测模型在各个领域中的应用不断扩展,特别是在低照度环境下的视觉任务。YOLOv8作为当前最先进的目标检测模型之一,在高亮度和良好照明条件下表现出色,但在低照度环境下的性能存在一定的不足。为了解决这一问题,我们提出了一种轻量级的低照度图像增强网络(IAT)来改进YOLOv8的暗光检测能力。本篇文章将深入探讨这一创新改进,并附带代码实现,帮助大家更好地理解这一技术的应用和效果。

一键难忘的博客 3501

java,write()方法后写flush()的作用

这个是缓冲区的问题. java在使用流时,都会有一个缓冲区,按一种它认为比较高效的方法来发数据:把要发的数据先放到缓冲区,缓冲区放满以后再一次性发过去,而不是分开一次一次地发. 而flush()表示强制将缓冲区中的数据发送出去,不必等到缓冲区满. 所以如果在用流的时候,没有用flush()这个方法,很多情况下会出现流的另一边读不到数据的问题,特别是在数据特别小的情况下. jav

AnneQiQi的博客 3万+

大语言模型与ROS集成的自然语言机器人控制:开源框架与应用实例

近年来,大语言模型(LLM)与机器人操作系统(ROS)的集成逐步成熟,使得自然语言驱动的机器人控制成为可能。用户输入“捡起绿色方块”或“把微波炉里的饭热好端过来”这类日常语句,机器人能够自动拆解步骤、规划动作并执行。本文梳理2026年前后发布的三个代表性开源框架——ROS-LLM、ROSClaw以及LLM+Nav2基准测试系统,介绍其技术路径与工程落地情况。

Studying…… 633

lammps后处理:堆垛层错和孪晶的数量统计

python调用ovito包可以免费实现ovito pro版本的功能,不需要安装ovito pro软件,如统计位错线长度、CNA结构、键角分布等,如需深入学习,可考虑报名python ovito后处理课程,或lammps一对一课程。lammps金属变形模拟中,可能会产生堆垛层错或者孪晶等结构,但是ovito免费版本无法统计这些结构的数量。使用python和ovito软件包,则可以方便的统计出这些结构的数量。大家好,我是小马老师。

lammps_jiayou的博客 466

Java基础系列七 IO流

Java基础系列第七章 IO流 流的概念、java.io包、InputStream和OutputStream流类、Reader和Writer流类、File类、Java常用流

676

一文整理深度学习【深度学习linux的docker+pytorch+cuda+nvidia-docker+vscode配置】

docker+pytorch+cuda+nvidia-docker+vscode

Edward的博客 1335

java 7 io_JAVA基础系列(七) IO流

IO流体系分字节流和字符流,里面又都分为输入输出流。下图展示了IO体系的框架图。粗体部分为本文涉及到的IO流。本文主要是采用输入输出配对方式进行IO流的讲解,同时附带有相关的类的介绍,本文内容构架如下图:1. File文件和目录路径名的抽象表示形式1.1 构造方法public File(String pathname)public File(String parent,String child)p...

weixin_34266692的博客 214

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

java tt 7_java从零开始系列(七)IO随机流

RandomAccessFile IO随机流关于java的IO随机流,我们经常只想读取文件的一部分数据,而不需要从头至尾读取整个文件。我们想访问一个作为数据库的文本文件,访问时移动到某一条记录并读取它的数据,接着移动到另一个记录,然后再到其他记录――每一条记录都位于文件的不同部分。Java编程语言提供了一个RandomAccessFile类来处理这种类型的输入输出,这就是java中的IO随机流。...

weixin_39818521的博客 449

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

I/O系列教材 (七)- Java 缓存流BufferedReader,PrintWriter

在每一次读写的时候,都会访问硬盘。如果读写的频率比较高的时候,其性能表现不佳。,以后每一次的读取,都是在缓存中访问,直到缓存中的数据读取完毕,再到硬盘中读取。PrintWriter 缓存字符输出流, 可以一次写出一行数据。缓存流在写入数据的时候,会先把数据写入到缓存区,直到缓存区。,而不是等缓存满了才写出去。这时候就需要用到flush。按照这种操作模式,就不会像字节流,字符流那样。为了解决以上弊端,采用缓存流。,碗里的吃完了,再到锅里去铲。缓存流在读取的时候,,从而减少了IO操作。

Lan_ht的博客 161

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

Java之关闭流

我们深知在操作Java流对象后要将流关闭,但往往事情不尽人意,大致有以下几种不能一定将流关闭的写法: 1.在try中关流,而没在finally中关流 try { OutputStream out = new FileOutputStream(""); // ...操作流代码 out.close(); } catch (Exception e) { e.printStackTra

生而为人我很抱歉 3万+

Java流系列(一):流的分类

File:只能对文件本身的信息进行操作,比如:获取文件的大小等,但无法对文件中的内容进行操作. 如果想对文件中的内容进行操作,则必须借助于流的概念. 一、流:一串流动的数据,以先进先出的方式发送信息的通道. 流的分类: 1:按照流的方向(参考点永远是自己的程序)分: 输入流(InputStream):只能向其中读取数据的流. 输出流(OutputStream):只能向其中写出数据的流. ...

zhoufeng的博客 4261

Java-详解IO流原理及流的分类

Java IO原理 一、概述 (1)I/O是Input/Output的缩写, I/O技术是非常实用的技术,用于处理设备之间的数据传输。如读/写文件,网络通讯等。 输入input:读取外部数据(磁 盘、光盘等存储设备的数据)到程序(内存)中。 输出output:将程序(内存)数据输出到磁盘、光盘等存储设 备中。 (2)Java程序中,对于数据的输入/输出操作以“流(stream)” 的方式进行。 (3) java.io包下提供了各种“流”类和接口,用以获取不同种 这里是引用 类的数据,并通过

weixin_52533007的博客 3188

JAVA系列:IO流

1、字节流是原生的操作,字符流是处理之后的操作。和Reader的子类。和Writer的子类。

zhengguofeng0328的博客 984

节点流与处理流:深入解析Java中的IO流

在Java的IO(输入/输出)库中,节点流(Node Stream)和处理流(Processing Stream)是两个重要的概念。虽然它们都是用于数据的输入和输出,但它们在功能和使用上有所不同。

✨ 欢迎来到【Seal ^_^ 的优快云博客】!✨ 5893

java中常用的流

Java中常用流总结 一、流    流是一个相对抽象的概念,所谓流就是一个传输数据的通道,这个通道可以传输相应类型的数据。进而完成数据的传输。这个通道被实现为一个具体的对象。 输入流:从外部空间(文件、网络连接、内存块)读入字节序列的管道(对象)。 输出流:可以向外部空间(文件、网络连接、内存块)写入字节序列的管道(对象)。、 两种最基本的抽象类:    处理字

小白 1万+

七、Java IO流 之管道流

管道流的处理和线程有关。 管道图解 在java.io包里面如果要想实现线程的通讯管道,使用两个类完成: PipedOutputStream、PipedInputStream 类的继承关系: public class PipedOutputStream extends OutputStream public class PipedInputStream extends InputStream 例:...

落日的博客 547

Java流系列(三):数据流、缓存流

一、数据流 注意:使用data输出流写出数据后,在使用Data输入流读取时一定要保证读取的顺序和写出的顺序一致,否则数据出现错乱。 (一)、使用数据输入流完成数据的读取操作 1.声明数据输入流对象 DataInputStream dataInputStream=null; 2.实例化数据输入流对象 dataInputStream=new DataInputStream(new FileInput...

zhoufeng的博客 1781

Java核心编程总结(七、Stream流)

面试前的“练手”还是很重要的,所以开始面试之前一定要准备好啊,不然也是耽搁面试官和自己的时间。我自己是刷了不少面试题的,所以在面试过程中才能够做到心中有数,基本上会清楚面试过程中会问到哪些知识点,高频题又有哪些,所以刷题是面试前期准备过程中非常重要的一点。![三年Java开发,刚从美团、京东、阿里面试归来,分享个人面经](https://uploa必看视频!获取2024年最新Java开发全套学习资料 备注Javaitle-必看视频!获取2024年最新Java开发全套学习资料 备注Java)]

2401_84003554的博客 908

java IO流学习总结

学习了几天的java IO流,下面我来谈谈对java 输入输出流IO的个人见解吧! 转载自:https://blog.csdn.net/zhaoyanjun6/article/details/54292148/ java流类结构图 一.流的概念: 流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象。它的特性是进行数据传输; 例如从水源地长江把水导入自来水厂,然后又从自...

coder150806的博客 5万+
上一篇: Java流系列(六):RandomAccessFile(随机读写)
下一篇: Java动态代理---Java Proxy
azhoufeng
博客等级 码龄10年 10粉丝 38原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值