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

Java基础知识(11)

Java基础知识(11)

(包括:IO流高级流,网络爬虫基础,Commons-i0工具包和Hutool工具包)

目录

Java基础知识(11)

一.IO流高级流

1.缓冲流

【1】字节缓冲流

(1)基础知识

(2)方法

[2] 字符缓冲流(其实基本流里已经有缓冲区了,速度提升不大)

(1)构造方法

(2)字符缓冲流特有方法

2.转换流

【1】转换流是字符流和字节流之间的桥梁

【2】作用

(1)作用1:

(2)作用2:

3.序列化流/对象操作输出流

(1)可以把Java中的对象写到本地文件中

(2)构造方法

(3)成员方法

(4)案例

(5)序列化流的小细节

4. 反序列化流 /对象操作输入流

(1)可以把序列化到本地文件中的对象,读取到程序中来

(2)构造方法

(3)成员方法

(4)序列化流/反序列化流的细节汇总

5. 打印流

【1】分类:打印流一般是指:PrintStream,PrintWriter两个类

【2】字节打印流(字节流底层没有缓冲区,开不开自动刷新都一样)

(1)构造方法

(2)成员方法

【3】字符打印流(字符流底层有缓冲区,想要自动刷新需要开启)

(1)构造方法

(2)成员方法

6. 解压缩流

(1)解压本质:把每一个ZipEntry按照层级拷贝到本地另一个文件夹中

(2)例子:

7. 压缩流

(1)压缩本质:把每一个(文件/文件夹)看成ZipEntry对象放到压缩包中

(2)例子:

8. Commons-i0

9. Hutool工具包

10.网络爬虫

(1)前置知识案例

(2)网络爬虫案例

1)

2)

3)Hutool中有类似的方法,上面仅供理解!!!!


一.IO流高级流

1.缓冲流

【1】字节缓冲流
(1)基础知识

BufferedinputStream 字节缓冲输入流

BufferedOutputStream字节缓冲输出流

原理:底层自带了长度为8192的缓冲区提高性能

(2)方法

1)public BufferedInputStream(InputStream is)把基本流包装成高级流,提高读取数据的性能

2)public BufferedOutputStream(0utputStream os) 把基本流包装成高级流,提高写出数据的性能

3)案例

BufferedInputStream bis = new BufferedInputStream(new FileInputstream( name: "myio\\a.txt"));

BufferedoutputStream bos = new BufferedoutputStream(new File0utputstream( name: "myio\\copy.txt"));

[2] 字符缓冲流(其实基本流里已经有缓冲区了,速度提升不大)
(1)构造方法

public BufferedReader(Reader r) 把基本流变成高级流

public Bufferedwriter(Writer r) 把基本流变成高级流

(2)字符缓冲流特有方法

字符缓冲输入流特有方法:

public string readLine() 读取一行数据,如果没有数据可读了,会返回null

字符缓冲输出流特有方法:

public void newLine() 跨平台的换行

2.转换流

【1】转换流是字符流和字节流之间的桥梁
【2】作用
(1)作用1:

1)指定字符集读写

2)案例

//创建对象并指定字符编码

InputStreamReader isr = new InputStreamReader(new FileInputStream(mvio\lgbkfile.txt"),“GBK”);

(在JDK11有更好的方法:FileReader fr=new FileReader("myio\\gbkfile,txt",charset.forName("GBK"));)

(2)作用2:

1)字节流想要使用字符流中的方法

2)案例

FileInputStream fis = new FileInputStream( name: "myio\la.txt");

InputStreamReader isr=new InputStreamReader(fis);

BufferedReader br =new BufferedReader(isr);

string str= br.readLine();

即:BufferedReader br = new BufferedReader(new InputstreamReader(new fileInputstream( name: "myio\\a.txt")));

3.序列化流/对象操作输出流

(1)可以把Java中的对象写到本地文件中
(2)构造方法

public ObjectOutputStream(0utputStream out)  把基本流包装成高级流

(3)成员方法

public final void write0bject(object obj)把对象序列化(写出)到文件中去

Student stu = new student( name:"zhangsan",age: 23);

(4)案例

ObjectOutputstream oos = new objectoutputstream(new File0utputstream( name: "myio\la.txt"));

oos.writeobject(stu);

(5)序列化流的小细节

使用对象输出流将对象保存到文件时会出现NotserializableException异常

解决方案:需要让Javabean类实现Serializable接口(标记性接口)

4. 反序列化流 /对象操作输入流

(1)可以把序列化到本地文件中的对象,读取到程序中来
(2)构造方法

public objectInputstream(Inputstream out) 把基本流变成高级流

(3)成员方法

public object readobject()把序列化到本地文件中的对象,读取到程序中来(需要进行强转)

(4)序列化流/反序列化流的细节汇总

① 使用序列化流将对象写到文件时,需要让Javabean类实现Serializable接口,否则,会出现NotSerializableException异常

② 序列化流写到文件中的数据是不能修改的,一旦修改就无法再次读回来了

③ 序列化对象后,修改了Javabean类,再次反序列化,会不会有问题?

会出问题,会抛出InvalidclassException异常

解决方案:给lavabean类添加serialVersionUID(列号、版本号)

private static final long serialVersionUID = -6357601841666449654L;

可用idea自动生成。

④如果一个对象中的某个成员变量的值不想被序列化,又该如何实现呢?

解决方案:给该成员变量加transient关键字修饰,该关键字标记的成员变量不参与序列化过程

⑤如果需要将多个对象进行序列化,一般规定将其放入一个集合中,序列化集合

5. 打印流

【1】分类:打印流一般是指:PrintStream,PrintWriter两个类

特点1:打印流只操作文件目的地,不操作数据源

特点2:特有的写出方法可以实现,数据原样写出

例如:打印:97 文件中:97

特点3:特有的写出方法,可以实现自动刷新,自动换行

打印一次数据=写出+换行+刷新

【2】字节打印流(字节流底层没有缓冲区,开不开自动刷新都一样)
(1)构造方法

public Printstream(0utputStream/File/string) 关联字节输出流/文件/文件路径(重要)

public PrintStream(String fileName,Charset charset) 指定字符编码(重要)

public PrintStream(OutputStream out,boolean autoFlush) 自动刷新

public PrintStream(0utputStream out,boolean autoFlush, String encoding) 指定字符编码且自动刷新

(2)成员方法

public void write(int b) 常规方法:规则跟之前一样,将指定的字节写出

public void println(Xxx xx) 特有方法:打印任意数据,自动刷新,自动换行

public void print(Xxx xx) 特有方法:打印任意数据,不换行

public void printf(String format,Object... args)特有方法:带有占位符的打印语句,不换行

【3】字符打印流(字符流底层有缓冲区,想要自动刷新需要开启)
(1)构造方法

public PrintWriter(Write/File/String) 关联字节输出流/文件/文件路径

public PrintWriter(String fileName, charset charset) 指定字符编码

public PrintWriter(Write w,boolean autoFlush) 自动刷新

public PrintWriter(0utputStream out, boolean autoFlush, charset charset) 指定字符编码且自动刷新

(2)成员方法

public void write(int b) 常规方法:规则跟之前一样,写出字节或者字符串

public void println(Xxx xx) 特有方法:打印任意数据,自动刷新,自动换行

public void print(Xxx xx) 特有方法:打印任意数据,不换行

public void printf(String format,Object... args)特有方法:带有占位符的打印语句,不换行

6. 解压缩流

(1)解压本质:把每一个ZipEntry按照层级拷贝到本地另一个文件夹中
(2)例子:

//创建一个解压缩流用来读取压缩包中的数据

ZipInputstream zip = new ZipInputstream(new FileInputstream(src));

//要先获取到压缩包里面的每一个zipentry对象

//表示当前在压缩包中获取到的文件或者文件夹

ZipEntry entry;

while((entry= zip.getNextEntry())!= nu11){

System.out.println(entry);

}

7. 压缩流

(1)压缩本质:把每一个(文件/文件夹)看成ZipEntry对象放到压缩包中
(2)例子:

public static void tozip(File src,File dest)throws IoException {

//1.创建压缩流关联压缩包

Zipoutputstream zos = new zipoutputstream(new File0utputstream(new File(dest, child: "a.zip")));

//2.创建zipEntry对象,表示压缩包里面的每一个文件和文件夹

ZipEntry entry = new zipEntry( name:"a.txt");

//3.把ZipEntry对象放到压缩包当中

zos.putNextEntry(entry);

//4.把src文件中的数据写到压缩包当中

FileInputstream fis = new FileInputstream(src);

int b;

while((b=fis.read())!=-1){

zos.write(b);

zos.closeEntry();

zos.close();

}

8. Commons-i0

(1)简介

Commons-io是apache开源基金组织提供的一组有关I0操作的开源工具包。

作用:提高I0流的开发效率,

(2)Commons-io使用步骤

1)在项目中创建一个文件夹:lib

2)将jar包复制粘贴到lib文件夹

3)右键点击jar包,选择 Add as Library ->点击OK

4)在类中导包使用

5)文档在仅我可见中。

9. Hutool工具包

官网:
    https://hutool.cn/
API文档:
    https://apidoc.gitee.com/dromara/hutool/

中文使用文档:
    https://hutool.cn/docs/#/

10.网络爬虫

(1)前置知识案例

//Pattern:表示正则表达式

//Matcher:文本匹配器,作用按照正则表达式的规则去读取字符串,从头开始读取,在大串中去找符合匹配规则的子串。

//获取正则表达式的对象

Pattern p=Pattern.compile("Java\\d{0,2}");

//获取文本匹配器的对象

//m:文本匹配器的对象

//str:大串

//p:规则

//m:要在str中找符合p规则的小串

Matcher m=p.matcher(str);

//拿着文本匹配器从头开始读取,寻找是否有满足规则的子串

//如果没有,方法返回false

//如果有,返回true。在底层记录子串的起始索引和结束索引+1

//如:0,4

boolean b=m.find();

//方法底层会根据find方法记录的索引进行字符串的截取

//substring(起始索引,结束索引);包头不包尾

//(0,4)但是不包含4索引

//会把截取的小串进行返回。

string s1 = m.group();

System.out.println(s1);

//第二次在调用find的时候,会继续读取后面的内容

//读取到第二个满足要求的子串,方法会继续返回true

//并把第二个子串的起始索引和结束索引+1,进行记录

b = m.find();

//第二次调用group方法的时候,会根据find方法记录的索引再次截取子串

string s2 = m.group();

System.out.println(s2);

}

(2)网络爬虫案例
1)

public static string webcrawler(string net)throws Ioxception {

//1.定义stringBuilder拼接爬取到的数据

StringBuilder sb=new stringBuilder();

//2.创建一个URL对象

URL url = new URL(net);

//3.链接上这个网址

//细节:保证网络是畅通的,而且这个网址是可以链接上的。

URLConnection conn =url.openconnection();

//4.读取数据

InputstreamReader isr = new InputStreamReader(conn.getInputstream());

int ch;

while((ch=isr.read())!=-1){

sb.append((char)ch);

//5.释放资源

isr.close();

//6.把读取到的数据返回

return sb.tostring();

}

2)

//通过正则表达式,把其中符合要求的数据获取出来

private static Arraylist<string> getData(string str, string regex){

//1.创建集合存放数据

ArrayList<string>list = new ArrayList<>();

//2.按照正则表达式的规则,去获取数据

Pattern pattern = Pattern.compile(regex);

//3.按照pattern的规则,到str当中获取数据

Matcher matcher =pattern.matcher(str);

while(matcher.find()){

list.add(matcher.group(index));

}

return list;

}

3)Hutool中有类似的方法,上面仅供理解!!!!

相关文章:

Java基础知识(11)

Java基础知识&#xff08;11&#xff09; &#xff08;包括&#xff1a;IO流高级流&#xff0c;网络爬虫基础&#xff0c;Commons-i0工具包和Hutool工具包&#xff09; 目录 Java基础知识&#xff08;11&#xff09; 一.IO流高级流 1.缓冲流 【1】字节缓冲流 &#xff0…...

iOS——SDWebImage源码学习

什么是SDWebImage SDWebImage是一个流行的iOS和macOS平台上的开源库&#xff0c;用于异步加载和缓存网络图片。它提供了一套简单易用的API&#xff0c;使得在应用中加载网络图片变得更加方便和高效。 主要特点和功能&#xff1a; 异步加载&#xff1a;SDWebImage通过异步方式…...

信创基础软件之中间件

信创基础软件之中间件 中间件概述 中间件是一种应用于分布式系统的基础软件&#xff0c;位于应用与操作系统、数据库之间&#xff0c;主要用于解决分布式环境下数据传输、数据访问、应用调度、系统构建和系统集成、流程管理等问题&#xff0c;是分布式环境下支撑应用开发、运…...

在Ubuntu linux操作系统上操作MySQL数据库常用的命令

检查是否安装了MySQL&#xff0c;或检查MySQL的状态&#xff1a; sudo systemctl status mysql或 sudo systemctl status mysql.service如果mysql有安装&#xff0c;上面这条命令会返回mysql的状态active或inactive。 卸载mysql数据库 第一步是停了数据库&#xff1a; sud…...

前端科举八股文-JAVASCRIPT篇

前端科举八股文-JAVASCRIPT篇 Js的变量类型&#xff0c;区别是什么平时有用过symbol吗函数闭包的理解?js的原型链&#xff1f; Function Function.constructor 返回值&#xff1f;promise的出现是为了解决什么问题&#xff1f;前端中的事件流事件委托?js的new操作符做了哪些…...

Docker私有仓库与Harbor部署使用

目录 一、本地私有仓库 1. 下载registry镜像 2. 在daemon.json文件中添加私有镜像仓库地址 ​编辑 3. 运行registry容器 4. Docker容器的重启策略如下 5. 为镜像打标签 6. 上传到私有仓库 7. 列出私有仓库的所有镜像 8. 列出私有仓库的centos镜像有哪些tag 9. 先删…...

Linux的iptables防火墙基础介绍

iptables 防火墙 应用层软件----管理 内核级netfilter 硬件-------内核----网络—netfilter/kvm----- app iptables iptables—控制netfilter 过滤&#xff1a;<smac/sip/dip/sport/dport/状态> TCP/IP 应用层 传输层 sport dport 状态 <三次握手/四次断开> 网…...

deepspeed+transformers模型微调

一、目录 代码讲解 二、实现。 1、代码讲解&#xff0c;trainer 实现。 transformers通过trainer 集成deepspeed功能&#xff0c;所以中需要进行文件配置&#xff0c;即可实现deepspeed的训练。 微调代码&#xff1a; 参数定义—>数据处理---->模型创建/评估方式----&…...

无人机摄影测量数据处理、三维建模及在土方量计算中的应用

专题一、无人机摄影测量技术应用现状及其发展 1、无人机摄影测量技术概述 2、摄影测量系统的发展 3、无人机摄影测量技术应用分析 专题二、基本原理和关键技术讲解 1、摄影测量基础知识 1&#xff09;航空摄影 2&#xff09;航摄像片的方位元素 3&#xff09;共…...

《ESP8266通信指南》15-MQTT连接、订阅MQTT主题并打印消息(基于Lua|适合新手|非常简单)

往期 《ESP8266通信指南》14-连接WIFI&#xff08;基于Lua&#xff09;-CSDN博客 《ESP8266通信指南》13-Lua 简单入门&#xff08;打印数据&#xff09;-CSDN博客 《ESP8266通信指南》12-Lua 固件烧录-CSDN博客 《ESP8266通信指南》11-Lua开发环境配置-CSDN博客 《ESP826…...

LeetCode:两数之和

文章收录于LeetCode专栏 LeetCode地址 两数之和 给定一个整数数组nums和一个整数目标值target&#xff0c;请你在该数组中找出和为目标值的那两个整数&#xff0c;并返回它们的数组下标。   你可以假设每种输入只会对应一个答案。但是数组中同一个元素在答案里不能重复出现。…...

CSDN我的创作纪念日128天||不忘初心|努力上进|勇往直前

机缘 Hello&#xff0c;大家好&#xff0c;我是景天&#xff0c;其实很早之前我就加入到了CSND的大军&#xff0c;彼时我还是个刚毕业的小白白&#xff0c;时常过来CSND汲取养料&#xff0c;就这样&#xff0c;慢慢的来提升自己&#xff0c;强大自己。工作锻炼了我&#xff0c…...

MySQL数据库中的浮点类型和高精度类型有什么区别?为什么不推荐使用浮点类型?

在软件开发中&#xff0c;作为后端&#xff0c;无可避免的需要熟练使用 MySQL 数据库进行数据存储和读取。对于信息系统而言&#xff0c;数据库的的地位不言而喻。那作为软件开发工程师&#xff0c;在使用 MySQL 过程中&#xff0c;又有哪些需要注意的呢&#xff1f;我们从实际…...

C++ 抽象与封装

一 抽象 抽象实例&#xff1a;时钟 数据抽象&#xff1a; 具有表面当前时间的时、分、秒 行为抽象&#xff1a; 具有设置时间和显示时间两个最基本的功能。 抽象实例&#xff1a;人 数据抽象&#xff1a;姓名、年龄、性别等。 行为抽象&#xff1a; 生物属性&#xff1a;吃…...

antV X6的简要使用教程

&#x1f9d1;‍&#x1f393; 个人主页&#xff1a;《爱蹦跶的大A阿》 &#x1f525;当前正在更新专栏&#xff1a;《VUE》 、《JavaScript保姆级教程》、《krpano》、《krpano中文文档》 ​ ​ ✨ 前言 在我们的日常开发工作中&#xff0c;我们经常需要构建复杂的交互式图…...

【LLM 论文】Step-Back Prompting:先解决更高层次的问题来提高 LLM 推理能力

论文&#xff1a;Take a Step Back: Evoking Reasoning via Abstraction in Large Language Models ⭐⭐⭐⭐ Google DeepMind, ICLR 2024, arXiv:2310.06117 论文速读 该论文受到的启发是&#xff1a;人类再解决一个包含很多细节的具体问题时&#xff0c;先站在更高的层次上解…...

Java——接口的补充

目录 一&#xff1a;接口的注意事项 1. 接口中不能有方法块&#xff1b; 2. 接口没有构造方法&#xff1a; 3.接口是可以多继承的&#xff1b; 4. 多个接口抽象方法重复 5. 类的父类方法与接口方法重复 二&#xff1a;类与接口 1. 继承与实现 2. 多个父接口的抽象…...

word转pdf的java实现(documents4j)

一、多余的话 java实现word转pdf可用的jar包不多&#xff0c;很多都是收费的。最近发现com.documents4j挺好用的&#xff0c;它支持在本机转换&#xff0c;也支持远程服务转换。但它依赖于微软的office。电脑需要安装office才能转换。鉴于没在linux中使用office&#xff0c;本…...

基于K8S构建Jenkins持续集成平台

文章目录 安装和配置NFSNFS简介NFS安装 在Kubernetes安装Jenkins-Master创建NFS client provisioner安装Jenkins-Master Jenkins与Kubernetes整合实现Jenkins与Kubernetes整合构建Jenkins-Slave自定义镜像 JenkinsKubernetesDocker完成微服务持续集成拉取代码&#xff0c;构建镜…...

PHPStudy 访问网页 403 Forbidden禁止访问

涉及靶场 upload-labd sqli-labs pikachu dvwa 以及所有部署在phpstudy中的靶场 注意&#xff1a;一定要安装解压软件 很多同学解压靶场代码以后访问报错的原因是&#xff1a;电脑上没有解压软件。 这个时候压缩包看起来就是黄色公文包的样子&#xff0c;右键只有“全部提取…...

SpringBoot-17-MyBatis动态SQL标签之常用标签

文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…...

网络编程(Modbus进阶)

思维导图 Modbus RTU&#xff08;先学一点理论&#xff09; 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议&#xff0c;由 Modicon 公司&#xff08;现施耐德电气&#xff09;于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…...

2025年能源电力系统与流体力学国际会议 (EPSFD 2025)

2025年能源电力系统与流体力学国际会议&#xff08;EPSFD 2025&#xff09;将于本年度在美丽的杭州盛大召开。作为全球能源、电力系统以及流体力学领域的顶级盛会&#xff0c;EPSFD 2025旨在为来自世界各地的科学家、工程师和研究人员提供一个展示最新研究成果、分享实践经验及…...

Java 8 Stream API 入门到实践详解

一、告别 for 循环&#xff01; 传统痛点&#xff1a; Java 8 之前&#xff0c;集合操作离不开冗长的 for 循环和匿名类。例如&#xff0c;过滤列表中的偶数&#xff1a; List<Integer> list Arrays.asList(1, 2, 3, 4, 5); List<Integer> evens new ArrayList…...

【第二十一章 SDIO接口(SDIO)】

第二十一章 SDIO接口 目录 第二十一章 SDIO接口(SDIO) 1 SDIO 主要功能 2 SDIO 总线拓扑 3 SDIO 功能描述 3.1 SDIO 适配器 3.2 SDIOAHB 接口 4 卡功能描述 4.1 卡识别模式 4.2 卡复位 4.3 操作电压范围确认 4.4 卡识别过程 4.5 写数据块 4.6 读数据块 4.7 数据流…...

五年级数学知识边界总结思考-下册

目录 一、背景二、过程1.观察物体小学五年级下册“观察物体”知识点详解&#xff1a;由来、作用与意义**一、知识点核心内容****二、知识点的由来&#xff1a;从生活实践到数学抽象****三、知识的作用&#xff1a;解决实际问题的工具****四、学习的意义&#xff1a;培养核心素养…...

oracle与MySQL数据库之间数据同步的技术要点

Oracle与MySQL数据库之间的数据同步是一个涉及多个技术要点的复杂任务。由于Oracle和MySQL的架构差异&#xff0c;它们的数据同步要求既要保持数据的准确性和一致性&#xff0c;又要处理好性能问题。以下是一些主要的技术要点&#xff1a; 数据结构差异 数据类型差异&#xff…...

C++ 求圆面积的程序(Program to find area of a circle)

给定半径r&#xff0c;求圆的面积。圆的面积应精确到小数点后5位。 例子&#xff1a; 输入&#xff1a;r 5 输出&#xff1a;78.53982 解释&#xff1a;由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982&#xff0c;因为我们只保留小数点后 5 位数字。 输…...

Spring Cloud Gateway 中自定义验证码接口返回 404 的排查与解决

Spring Cloud Gateway 中自定义验证码接口返回 404 的排查与解决 问题背景 在一个基于 Spring Cloud Gateway WebFlux 构建的微服务项目中&#xff0c;新增了一个本地验证码接口 /code&#xff0c;使用函数式路由&#xff08;RouterFunction&#xff09;和 Hutool 的 Circle…...

三分算法与DeepSeek辅助证明是单峰函数

前置 单峰函数有唯一的最大值&#xff0c;最大值左侧的数值严格单调递增&#xff0c;最大值右侧的数值严格单调递减。 单谷函数有唯一的最小值&#xff0c;最小值左侧的数值严格单调递减&#xff0c;最小值右侧的数值严格单调递增。 三分的本质 三分和二分一样都是通过不断缩…...