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基础知识(11) (包括:IO流高级流,网络爬虫基础,Commons-i0工具包和Hutool工具包) 目录 Java基础知识(11) 一.IO流高级流 1.缓冲流 【1】字节缓冲流 ࿰…...

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

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

在Ubuntu linux操作系统上操作MySQL数据库常用的命令
检查是否安装了MySQL,或检查MySQL的状态: sudo systemctl status mysql或 sudo systemctl status mysql.service如果mysql有安装,上面这条命令会返回mysql的状态active或inactive。 卸载mysql数据库 第一步是停了数据库: sud…...
前端科举八股文-JAVASCRIPT篇
前端科举八股文-JAVASCRIPT篇 Js的变量类型,区别是什么平时有用过symbol吗函数闭包的理解?js的原型链? Function Function.constructor 返回值?promise的出现是为了解决什么问题?前端中的事件流事件委托?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 过滤:<smac/sip/dip/sport/dport/状态> TCP/IP 应用层 传输层 sport dport 状态 <三次握手/四次断开> 网…...
deepspeed+transformers模型微调
一、目录 代码讲解 二、实现。 1、代码讲解,trainer 实现。 transformers通过trainer 集成deepspeed功能,所以中需要进行文件配置,即可实现deepspeed的训练。 微调代码: 参数定义—>数据处理---->模型创建/评估方式----&…...
无人机摄影测量数据处理、三维建模及在土方量计算中的应用
专题一、无人机摄影测量技术应用现状及其发展 1、无人机摄影测量技术概述 2、摄影测量系统的发展 3、无人机摄影测量技术应用分析 专题二、基本原理和关键技术讲解 1、摄影测量基础知识 1)航空摄影 2)航摄像片的方位元素 3)共…...

《ESP8266通信指南》15-MQTT连接、订阅MQTT主题并打印消息(基于Lua|适合新手|非常简单)
往期 《ESP8266通信指南》14-连接WIFI(基于Lua)-CSDN博客 《ESP8266通信指南》13-Lua 简单入门(打印数据)-CSDN博客 《ESP8266通信指南》12-Lua 固件烧录-CSDN博客 《ESP8266通信指南》11-Lua开发环境配置-CSDN博客 《ESP826…...
LeetCode:两数之和
文章收录于LeetCode专栏 LeetCode地址 两数之和 给定一个整数数组nums和一个整数目标值target,请你在该数组中找出和为目标值的那两个整数,并返回它们的数组下标。 你可以假设每种输入只会对应一个答案。但是数组中同一个元素在答案里不能重复出现。…...

CSDN我的创作纪念日128天||不忘初心|努力上进|勇往直前
机缘 Hello,大家好,我是景天,其实很早之前我就加入到了CSND的大军,彼时我还是个刚毕业的小白白,时常过来CSND汲取养料,就这样,慢慢的来提升自己,强大自己。工作锻炼了我,…...
MySQL数据库中的浮点类型和高精度类型有什么区别?为什么不推荐使用浮点类型?
在软件开发中,作为后端,无可避免的需要熟练使用 MySQL 数据库进行数据存储和读取。对于信息系统而言,数据库的的地位不言而喻。那作为软件开发工程师,在使用 MySQL 过程中,又有哪些需要注意的呢?我们从实际…...

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

antV X6的简要使用教程
🧑🎓 个人主页:《爱蹦跶的大A阿》 🔥当前正在更新专栏:《VUE》 、《JavaScript保姆级教程》、《krpano》、《krpano中文文档》 ✨ 前言 在我们的日常开发工作中,我们经常需要构建复杂的交互式图…...

【LLM 论文】Step-Back Prompting:先解决更高层次的问题来提高 LLM 推理能力
论文:Take a Step Back: Evoking Reasoning via Abstraction in Large Language Models ⭐⭐⭐⭐ Google DeepMind, ICLR 2024, arXiv:2310.06117 论文速读 该论文受到的启发是:人类再解决一个包含很多细节的具体问题时,先站在更高的层次上解…...
Java——接口的补充
目录 一:接口的注意事项 1. 接口中不能有方法块; 2. 接口没有构造方法: 3.接口是可以多继承的; 4. 多个接口抽象方法重复 5. 类的父类方法与接口方法重复 二:类与接口 1. 继承与实现 2. 多个父接口的抽象…...

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

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

PHPStudy 访问网页 403 Forbidden禁止访问
涉及靶场 upload-labd sqli-labs pikachu dvwa 以及所有部署在phpstudy中的靶场 注意:一定要安装解压软件 很多同学解压靶场代码以后访问报错的原因是:电脑上没有解压软件。 这个时候压缩包看起来就是黄色公文包的样子,右键只有“全部提取…...
电脑插入多块移动硬盘后经常出现卡顿和蓝屏
当电脑在插入多块移动硬盘后频繁出现卡顿和蓝屏问题时,可能涉及硬件资源冲突、驱动兼容性、供电不足或系统设置等多方面原因。以下是逐步排查和解决方案: 1. 检查电源供电问题 问题原因:多块移动硬盘同时运行可能导致USB接口供电不足&#x…...
渲染学进阶内容——模型
最近在写模组的时候发现渲染器里面离不开模型的定义,在渲染的第二篇文章中简单的讲解了一下关于模型部分的内容,其实不管是方块还是方块实体,都离不开模型的内容 🧱 一、CubeListBuilder 功能解析 CubeListBuilder 是 Minecraft Java 版模型系统的核心构建器,用于动态创…...
HybridVLA——让单一LLM同时具备扩散和自回归动作预测能力:训练时既扩散也回归,但推理时则扩散
前言 如上一篇文章《dexcap升级版之DexWild》中的前言部分所说,在叠衣服的过程中,我会带着团队对比各种模型、方法、策略,毕竟针对各个场景始终寻找更优的解决方案,是我个人和我司「七月在线」的职责之一 且个人认为,…...
k8s从入门到放弃之HPA控制器
k8s从入门到放弃之HPA控制器 Kubernetes中的Horizontal Pod Autoscaler (HPA)控制器是一种用于自动扩展部署、副本集或复制控制器中Pod数量的机制。它可以根据观察到的CPU利用率(或其他自定义指标)来调整这些对象的规模,从而帮助应用程序在负…...

ZYNQ学习记录FPGA(一)ZYNQ简介
一、知识准备 1.一些术语,缩写和概念: 1)ZYNQ全称:ZYNQ7000 All Pgrammable SoC 2)SoC:system on chips(片上系统),对比集成电路的SoB(system on board) 3)ARM:处理器…...

解析两阶段提交与三阶段提交的核心差异及MySQL实现方案
引言 在分布式系统的事务处理中,如何保障跨节点数据操作的一致性始终是核心挑战。经典的两阶段提交协议(2PC)通过准备阶段与提交阶段的协调机制,以同步决策模式确保事务原子性。其改进版本三阶段提交协议(3PC…...

云原生安全实战:API网关Envoy的鉴权与限流详解
🔥「炎码工坊」技术弹药已装填! 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 一、基础概念 1. API网关 作为微服务架构的统一入口,负责路由转发、安全控制、流量管理等核心功能。 2. Envoy 由Lyft开源的高性能云原生…...

大模型——基于Docker+DeepSeek+Dify :搭建企业级本地私有化知识库超详细教程
基于Docker+DeepSeek+Dify :搭建企业级本地私有化知识库超详细教程 下载安装Docker Docker官网:https://www.docker.com/ 自定义Docker安装路径 Docker默认安装在C盘,大小大概2.9G,做这行最忌讳的就是安装软件全装C盘,所以我调整了下安装路径。 新建安装目录:E:\MyS…...

【笔记】AI Agent 项目 SUNA 部署 之 Docker 构建记录
#工作记录 构建过程记录 Microsoft Windows [Version 10.0.27871.1000] (c) Microsoft Corporation. All rights reserved.(suna-py3.12) F:\PythonProjects\suna>python setup.py --admin███████╗██╗ ██╗███╗ ██╗ █████╗ ██╔════╝…...
比特币:固若金汤的数字堡垒与它的四道防线
第一道防线:机密信函——无法破解的哈希加密 将每一笔比特币交易比作一封在堡垒内部传递的机密信函。 解释“哈希”(Hashing)就是一种军事级的加密术(SHA-256),能将信函内容(交易细节…...