当前位置: 首页 > 编程日记 > 正文

Java学习总结:42(字节流和字符流)

字节流与字符流

上一节我们学习了文件操作类File,但是File类虽然可以操作文件,但是却不能操作文件的内容。如果要进行文件内容的操作,就必须依靠流的概念来完成。流在实际中分为输入流和输出流两种,输入流和输出流是一种相对的概念,关键是要看参考点。

Java中针对数据流的操作也分为输入与输出两种方式,并且提供了以下的支持:
字节流:InputStream(输入字节流)、OutputStream(输出字节流);
字符流:Reader(输入字符流)、Writer(输出字符流)

注意:这四个操作流的类都属于抽象类,所以在使用这些类时,必须通过子类对象向上转型来进行抽象类的实例化操作。

流的基本操作形式:

  1. 通过File类定义一个要操作文件的路径;
  2. 通过字节流的子类对象为父类对象实例化;
  3. 进行数据的读(输入)、写(输出)操作;
  4. 数据流属于资源操作,资源操作必须关闭。
    其中最重要的式第四步,不管何种情况,只要是资源操作(例如:网络、文件、数据库的操作都属于资源操作),就必须关闭连接(几乎每种类都会提供close()方法)。

字节输出流:OutputStream

OutputStream类的常用方法

No.方法类型描述
1public void close() throws IOException普通关闭字节输出流
2public void flush() throws IOException普通强制刷新
3public abstract void write(int b) throws IOException普通输出单个字节
4public void write(byte[] b) throws IOException普通输出全部字节数组数据
5public void write(byte[] b,int off,int len) throws IOException普通输出部分字节数组数据

关于OutputStream类的组成说明
OutputStream是一个抽象类,该类的定义如下:

public abstract class OutputStream extends Object implement Closeable,Flushable

由上我们可以发现OutputStream类同时实现了Closeable与Flushable两个父接口,而这两个父接口的定义如下:

Closeable接口
public interface Closeable extends AutoCloseable{public void close() throws IOException;
}
Flushable接口
public interface Flushable{public void flush() throws IOException
}

通过定义我们可以发现Closeable接口声明继承了AutoCloseable(自动关闭)父接口,该接口定义如下:

public interface AutoCloseable{public void close() throws Excption;
}

通过AutoCloseable接口系统会自动帮助我们(即用户)调用close()方法释放资源。

例:自动执行close()操作

package Project.Study.OutputStreamClass;class Net implements AutoCloseable{@Overridepublic void close()throws Exception {System.out.println("资源自动关闭,释放资源");}public void info()throws Exception {//假设有异常抛出System.out.println("...");}
}
public class Test1 {public static void main(String[]args){try(Net net=new Net()) {net.info();}catch (Exception e){e.printStackTrace();}}
}
//结果:
//...
//资源自动关闭,释放资源

OutputStream类本身是一个抽象类,这样就需要一个子类。所以,可以使用FileOutputStream子类完成操作。

FileOutputStream类的常用方法

No.方法类型描述
1public FileOutputStream(File file)throws FileNotFoundException构造将内容输出到指定路径,如果文件已经存在,则使用新的内容覆盖旧的内容
2public FileOutputStream(File file,boolean append)throws FileNotFoundException构造如果将布尔参数设置为true,表示追加新的内容到文件中

例:文件内容的输出

package Project.Study.OutputStreamClass;import java.io.*;public class Test2 {public static void main(String[]args)throws Exception{//1.定义要输出文件的路径File file=new File("d:"+File.separator+"Test"+File.separator+"Test.txt");if (!file.getParentFile().exists()){//文件目录不存在file.getParentFile().mkdirs();  //创建目录}//2.应使用OutputStream和其子类进行对象的实例化,此时目录存在,文件还不存在OutputStream outputStream=new FileOutputStream(file);//字节流输出需要使用byte类型,需要将String类对象变为字节数组String str="Hello World!!!";byte[]data=str.getBytes();  //将字符串变为字节数组outputStream.write(data);   //输出内容outputStream.close();       //资源操作的最后一定要进行关闭}
}

结果:
在这里插入图片描述

例:采用单个字节的方式输出

package Project.Study.OutputStreamClass;
import java.io.*;
public class Test3 {public static void main(String[]args)throws Exception{//1.定义要输出文件的路径File file=new File("d:"+File.separator+"Test"+File.separator+"Test.txt");if (!file.getParentFile().exists()){//文件目录不存在file.getParentFile().mkdirs();  //创建目录}//2.应使用OutputStream和其子类进行对象的实例化,此时目录存在,文件还不存在OutputStream outputStream=new FileOutputStream(file);//字节流输出需要使用byte类型,需要将String类对象变为字节数组String str="Hello World!!!";byte[]data=str.getBytes();  //将字符串变为字节数组for (int x=0;x<data.length;x++){outputStream.write(data[x]);//内容输出}outputStream.close();       //资源操作的最后一定要进行关闭}
}

例:输出部分字节数组内容(设置数组的开始索引和长度)

package Project.Study.OutputStreamClass;import java.io.*;public class Test4 {public static void main(String[]args)throws Exception{//1.定义要输出文件的路径File file=new File("d:"+File.separator+"Test"+File.separator+"Test.txt");if (!file.getParentFile().exists()){//文件目录不存在file.getParentFile().mkdirs();  //创建目录}//2.应使用OutputStream和其子类进行对象的实例化,此时目录存在,文件还不存在OutputStream outputStream=new FileOutputStream(file);//字节流输出需要使用byte类型,需要将String类对象变为字节数组String str="Hello World!!!";byte[]data=str.getBytes();  //将字符串变为字节数组outputStream.write(data,0,6);//内容输出outputStream.close();       //资源操作的最后一定要进行关闭}
}

结果:
在这里插入图片描述
注意:采用上面这种方法输出时,要注意数组越界的问题

我们上面三个文件操作都是对文件内容的覆盖,而如果要实现文件的追加操作可以使用public FileOutputStream(File file,boolean append)的构造方法。

例:文件追加

package Project.Study.OutputStreamClass;import java.io.*;public class Test3 {public static void main(String[]args) throws Exception {//1.定义要输出文件的路径File file=new File("d:"+File.separator+"Test"+File.separator+"Test.txt");if (!file.getParentFile().exists()){//文件目录不存在file.getParentFile().mkdirs();  //创建目录}//2.应使用OutputStream和其子类进行对象的实例化,此时目录存在,文件还不存在OutputStream outputStream=new FileOutputStream(file,true);//追加模式//字节流输出需要使用byte类型,需要将String类对象变为字节数组String str="Hello World!!!";byte[]data=str.getBytes();  //将字符串变为字节数组outputStream.write(data,5,9);//内容输出outputStream.close();       //资源操作的最后一定要进行关闭}
}

结果:
在这里插入图片描述

字节输入流:InputStream

如果要进行文件数据的读取操作,就可以用java.io.InputStream类完成,此类可以完成字节数据的读取操作。

InputStream类的常用方法

No.方法类型描述
1public void close() throws IOException普通关闭字节输入流
2public abstract int read() throws IOException普通读取单个字节
3public int read(byte[] b) throws IOException普通将数据读取到字节数组中,同时返回读取长度
4public int read(byte[] b,int off,int len) throws IOException普通将数据读取到部分字节数组中,同时返回读取的数据长度

InputStream类依旧属于一个抽象类,此类的定义如下:

public abstract class InputStream extends Object implements Closeable

通过定义可以发现InputStream类也实现了Closeable接口(继承了AutoCloseable接口),所以利用自动关闭的异常处理结构可以实现自动的资源释放。

关于InputStream类的三个方法的详细作用:

  • 读取单个字节:public abstract int read() throws IOException;
    返回值:返回读取的字节内容,如果已经没有内容,则读取后返回“-1”;

  • 将读取的数据保存在字节数组里(一次读取多个数据):public int read(byte[] b) throws IOException;
    返回值:返回读取的数据长度,如果已经读取到结尾,则读取后返回“-1”;

  • 将读取的数据保存在部分字节数组里:public int read(byte[] b,int off,int len) throws IOException;
    返回值:读取的部分数据的长度,如果已经读取到结尾,则读取后返回“-1”

java.io.InputStream是一个抽象类,所以如果要进行文件的读取,需要使用FileInputStream子类,而这个子类的构造方法如下:

方法类型描述
public FileInputStream (File file) throws FileNotFoundException普通设置要读取文件数据的路径

例:数据读取操作

package Project.Study.InputStream;import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;public class Test1 {public static void main(String[]args) throws Exception {File file=new File("d:"+File.separator+"Test"+File.separator+"test.txt");//定义要输出文件的路径if (file.exists()){                         //判断文件是否存在后才可以进行读取InputStream inputStream=new FileInputStream(file);//使用InputStream进行读取byte[]data=new byte[1024];              //准备一个1024的数组int len=inputStream.read(data);         //进行数据读取,将内容保存到字节数组中inputStream.close();                    //关闭输入流System.out.println("【"+new String(data,0,len)+"】");//将读取出来的字节数组变为字符串进行输出}}
}
//结果:
//【Hello World!!!】

例:采用while循环实现输入流操作

package Project.Study.InputStream;import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;public class Test2 {public static void main(String[]args)throws Exception{File file=new File("d:"+File.separator+"Test"+File.separator+"test.txt");//定义输出文件的路径if (file.exists()){                                         //判断文件是否存在后才可以进行读取InputStream inputStream=new FileInputStream(file);      //使用InputStream进行读取byte[]data=new byte[1024];                              //准备一个1024的数组int foot=0;                                             //表示字节数组的操作脚标int temp=0;                                             //表示接收每次读取的字节数据while((temp=inputStream.read())!=-1){                   //当inputStream.read()!=-1,即输出文件中还有内容data[foot++]=(byte)temp;                            //有内容就进行保存}inputStream.close();                                    //关闭输出流System.out.println("【"+new String(data,0,foot)+"】");}}
}
//结果:
//【Hello World!!!】

字符输出流:Writer

利用Writer类可以直接实现字符数组(包含字符串)的输出。

Writer类的常用方法

No.方法类型描述
1public void close() throws IOException普通关闭字节输出流
2public void flush() throws IOException普通强制刷新
3public Writer append(CharSequence csq) throws IOException普通追加数据
4public void write(String str) throws IOException普通输出字符串数据
5public void write(char[] cbuf) throws IOException普通输出字符数组数据

通过Writer类定义的方法可以发现,Writer类中直接提供了输出字符串数据的方法。

Writer类的定义:
Writer类也是属于抽象类,定义如下:

public abstract class Writer extends Object implement Appendable,Closeable,Flushable

通过继承结构我们可以发现,Writer类中除了实现Closeable与Flushable接口外,还实现了一个Appendable接口,该接口定义如下:

public interface Appendable{public Appendable append(char c)throws IOException;public Appendable append(CharSequence csq)throws IOException;public Appendable append(CharSequence csq,int start,int end)throws IOException;
}

在Appendable接口中定义了一系列数据追加操作,而追加的类型可以是CharSequence(可以保存String、StringBuffer、StringBuilder类对象)。

因为Writer是一个抽象类,所以要使用java.io.FileWriter类实现Writer类对象的实例化操作。

FileWriter类的常用方法

No.方法类型描述
1public FileWriter(File file) throws IOException构造设置输出文件
2public FileWriter(File file,boolean append) throws IOException普通设置输出文件以及是否进行数据追加

例:使用Writer类实现内容输出

package Project.Study.WriterClass;import java.io.File;
import java.io.FileWriter;
import java.io.Writer;public class Test1 {public static void main(String[]args)throws Exception{File file=new File("d:"+File.separator+"Test1"+File.separator+"test.txt");//定义要输出文件的路径if (!file.getParentFile().exists()){//判断目录是否存在file.getParentFile().mkdirs();  //创建文件目录}Writer writer=new FileWriter(file); //实例化了Writer类的对象String str="Hello World!!!";        //定义输出内容writer.write(str);                  //输出字符串内容writer.close();                     //关闭输出流}
}

结果:
在这里插入图片描述

字符输入流:Reader

java.io.Reader类是实现字符数据输入的操作类,在进行数据读取时可以不使用字节数据,而直接依靠字符数据(方便处理中文)进行操作。

Reader类的常用方法

No.方法类型描述
1public void close() throws IOException普通关闭字节输入流
2public int read() throws IOException普通读取单个数据
3public int read() throws IOException普通读取单个字符
4public int read(char[] cbuf) throws IOException普通读取数据到字符数组中,返回读取长度
5public long skip(long n) throws IOException普通跳过字节长度

Reader类的定义结构:

public abstract class Reader extends Object implement Readable,Closeable

Readable接口定义如下:

public interface Readable{public int read(CharBuffer cb)throws IOException;
}

在Reader接口中定义的read()方法可以将数据保存在CharBuffer(字符缓冲,类似于StringBuffer)对象中,也就是说利用此类对象就可以替代字符数组的操作。

同样的,因为Reader类是一个抽象类,要实现文件数据的字符流读取,可以利用FileReader子类为Reader类对象实例化。

FileReader类的常用方法如下:

No.方法类型描述
1public FileReader(File file) throws FileNotFoundException构造定义要读取的文件路径

例:使用Reader读取数据

package Project.Study.ReaderClass;import java.io.File;
import java.io.FileReader;
import java.io.Reader;public class Test1 {public static void main(String[]args)throws Exception{File file=new File("d:"+File.separator+"Test1"+File.separator+"test.txt");//定义要输出的路径if (file.exists()){                                     //判断文件是否存在Reader reader=new FileReader(file);                 //为Reader对象实例化char[]data=new char[1024];                          //开辟字符数组,接收读取数据int len=reader.read(data);                          //进行数据读取reader.close();                                     //关闭输入流System.out.println(new String(data,0,len));}}
}
//结果:
//Hello World!!!

字节流与字符流的区别

我们以文件操作为例,字节流与字符流最大的区别就是:字节流直接与终端文件进行数据交互,字符流需要将数据经过缓冲区处理才与终端文件数据交互。在开发中,对字节数据处理是比较多的,而字符流最大的好处是它可以进行中文的有效处理,因此,在开发中,如果要处理中文时应优先考虑字符流,如果没有中文问题,建议使用字节流。
在使用OutputStream输出数据时,即使最后没有关闭输出流,内容也可以正常输出,但是反过来如果使用的是字符输出流Writer,在执行到最后如果不关闭输出流,就表示在缓冲区中处理的内容不会被强制性清空,所以就不会输出数据。如果有特殊情况不能关闭字符输出流,可以使用flush()方法强制清空缓冲区。
例:错误示范(不关闭流)

package Project.Study.WriterClass;import java.io.File;
import java.io.FileWriter;
import java.io.Writer;public class Test2 {public static void main(String[]args)throws Exception{File file=new File("d:"+File.separator+"Test1"+File.separator+"test2.txt");//定义输出文件的路径if (!file.getParentFile().exists()){        //判断文件目录是否存在file.getParentFile().mkdirs();          //若不存在就创建文件目录}Writer writer=new FileWriter(file);         //实例化了Writer类的对象String str="Hi!!!";                         //定义输出内容writer.write(str);                          //输出字符串数据}
}

结果:
在这里插入图片描述
通过上程序执行的结果我们可以看到,此时并没有输出结果,输出文件中什么也没有。

例:强制清空字符流缓冲区

package Project.Study.WriterClass;import java.io.File;
import java.io.FileWriter;
import java.io.Writer;public class Test2 {public static void main(String[]args)throws Exception{File file=new File("d:"+File.separator+"Test1"+File.separator+"test2.txt");//定义输出文件的路径if (!file.getParentFile().exists()){        //判断文件目录是否存在file.getParentFile().mkdirs();          //若不存在就创建文件目录}Writer writer=new FileWriter(file);         //实例化了Writer类的对象String str="Hi!!!";                         //定义输出内容writer.write(str);                          //输出字符串数据writer.flush();                             //强制刷新缓冲区}
}

结果:
在这里插入图片描述
上程序执行到最后并没有执行流的关闭操作,所以从本质上讲,内容将无法完整输出。但因为利用了flush()方法强制刷新缓冲区,所以它的内容完整输出了,也就是说,在不关闭流又要完整输出内容时就只能利用flush()方法强制刷新缓冲区。

相关文章:

用C#钩子写一个改键外挂

我的微信群——软件开发测试工程师交流群&#xff0c;欢迎扫码&#xff1a; 改键是一种习惯&#xff0c;比如在玩儿lol或者dota的时候。理论上玩儿什么游戏都可以改键。 做一个窗体&#xff08;点击Install——应用改键&#xff0c;点击Uninstall——撤销应用&#xff09;&…

Spring中WebApplicationContext

ApplicationContext是Spring的核心&#xff0c;Context我们通常解释为上下文环境&#xff0c;我想用“容器”来表述它更容易理解一 些&#xff0c;ApplicationContext则是“应用的容器”了:P&#xff0c;Spring把Bean放在这个容器中&#xff0c;在需要的时候&#xff0c;用getB…

洛谷 P1966 火柴排队

题意 给定2个等长序列a、b&#xff0c;要求通过交换使 \[\sum_{i1}^{n}(a_i-b_i)^2\] 最小。 分析 看着这个式子&#xff0c;我突然想到了方差。很明显&#xff0c;方差反应数据的波动程度&#xff0c;所以让数据集中就可以使方差变小了。而对应到这个公式&#xff0c;大方向就…

Revit结构2021-2022从零到精通

流派:电子学习| MP4 |视频:h264&#xff0c;1280720 |音频:AAC&#xff0c;44.1 KHz 语言&#xff1a;英语中英文字幕&#xff08;根据原英文字幕机译更准确&#xff09; |大小解压后:8.6 GB 含课程文件 |时长:14h 46m 涵盖Revit结构2021-2022的基本、中级和高级功能 Revit Str…

BZOJ1922: [Sdoi2010]大陆争霸

题目&#xff1a;http://www.lydsy.com/JudgeOnline/problem.php?id1922 带限制最短路。 每个点真正的dis是max(dis[i],dis[v]),v是其保护点。 可以把题目中的保护转化为每个点的贡献。 每次扫一边连出的边做最短路把rd为0的点加入队列。 再扫一遍自己的贡献&#xff0c;更新它…

Java学习总结:43(转换流)

转换流 字节流和字符流的转换可以通过InputStreamReader、OutputStreamWriter两个类转换&#xff0c;下面是这两个类的继承结构和构造方法 名称定义构造构造方法InputStreamReaderpublic class InputStreamReader extends Readerpublic InputStreamReader(InputStream in)Out…

2022-2028年中国环保服务业投资分析及前景预测报告

【报告类型】产业研究 【报告价格】4500起 【出版时间】即时更新&#xff08;交付时间约3个工作日&#xff09; 【发布机构】智研瞻产业研究院 【报告格式】PDF版 本报告介绍了中国环保服务行业市场行业相关概述、中国环保服务行业市场行业运行环境、分析了中国环保服务行…

一个build.xml实例

<?xml version"1.0"?> <project name"ssh" basedir"." default"usage"> <property name"name" value"ssh"/> <property name"war.dir" value"war"/> &l…

Spring Boot 2.0 常见问题总结(一)

SpringBoot2.x 依赖环境和版本新特性说明 依赖版本 jdk8 以上, Springboot2.x 用 JDK8 , 因为底层是 Spring framework5 。jar 包方式运行 SpringBoot 项目时问题 打包成jar包&#xff0c;需要增加maven依赖。 <build><plugins><plugin><groupId>org.s…

UE4场景设计学习教程

视频:MPEG4视频(H264) 19201080 25fps 1400kbps |音频:AAC 44100Hz立体声128kbps 语言&#xff1a;西班牙语中英文字幕&#xff08;根据原英文字幕机译更准确&#xff09; |时长:35节课(6小时36分钟) 文件大小:4.7 GB 学会使用这个强大的软件的工具&#xff0c;一步一步地创造…

Java学习总结:44(文件复制案例)

案例&#xff1a;文件复制(针对InputStream和OutputStream的操作应用) 流程图(比较复杂我就不敲了&#xff0c;直接拍出来) 例&#xff1a;实现文件复制操作 package Project.Study.FileCopyCase;import java.io.*;public class Test {public static void main(String[]args…

java多态的理解

Java中多态性的实现 什么是多态 面向对象的三大特性&#xff1a;封装、继承、多态。从一定角度来看&#xff0c;封装和继承几乎都是为多态而准备的。这是我们最后一个概念&#xff0c;也是最重要的知识点。多态的定义&#xff1a;指允许不同类的对象对同一消息做出响应。即同一…

2022-2028年中国高密度聚乙烯(HDPE)行业市场发展调研及投资前景分析报告

【报告类型】产业研究 【报告价格】4500起 【出版时间】即时更新&#xff08;交付时间约3个工作日&#xff09; 【发布机构】智研瞻产业研究院 【报告格式】PDF版 本报告介绍了中国高密度聚乙烯(HDPE)行业市场行业相关概述、中国高密度聚乙烯(HDPE)行业市场行业运行环境、…

计算机视觉图像处理机器学习压缩感知等论文代码大全

点击链接进入相关博文 1.来自西弗吉利亚大学li xin整理的CV代码合集 主要包括&#xff1a; 1.图像去噪&#xff0c;编码&#xff0c;去马赛克&#xff0c;超分辨&#xff0c;分割&#xff0c;去模糊&#xff0c;纹理合成&#xff0c;修复&#xff0c;质量评估等 2.视频编码和目…

Java 17 VS Java 8: 新旧对决,这些Java 17新特性你不容错过

Java是一门非常流行的编程语言,由于其跨平台性、可移植性以及强大的面向对象特性而备受青睐。Java最初由Sun Microsystems公司于1995年推出,随着时间的推移,Java发展迅速,版本不断更新。本篇博客将重点介绍Java 17与Java 8的对比,以及Java 17的新特性。

VirtualBox装ghost XP

在win7 professional 64上安装了virtualBox4.3.14 r95030 版本&#xff0c;之所以要安装这个vb,是因为刚升级的vm 打开之后很占用cpu&#xff0c; 网上又说vb不是很占用cpu而且是开源的&#xff0c; 于是就安装来试试&#xff0c; 但是以前没玩过&#xff0c; 哪知道安装个xp都…

【Java】常用的函数式接口(含示例)

Supplier接口被称为生产型接口:指定泛型是什么类型,接口的get()方法就会生产什么样的类型的数据。具体怎样消费、怎样使用这个数据呢?就由之后传入的Lambda表达式决定吧!与生产工厂Supplier相反,Consumer用来消费,即使用一个数据。具体生成一个怎样的数据?就由之后传入的Lambda表达式决定吧!转换的过程是怎样的呢?就由之后传入的Lambda表达式决定吧!具体根据什么判断呢?就由之后传入的Lambda表达式决定吧!对某种数据类型的数据进行判断,返回一个布尔值。

写实的CG人物角色制作学习教程

艺术站-制作欧比旺克诺比逼真的Cg角色 大小解压后&#xff1a;4.98G 含课程素材文件 1920X1080 .mp4 语言&#xff1a;英语中英文字幕&#xff08;根据原英文字幕机译更准确&#xff09; 信息: 欧比旺是我一直以来最喜欢的角色之一&#xff0c;所以有时间做这个3D人像真的很好…

Java学习总结:45(字符编码)

字符编码 在实际工作中最常见的4种编码如下&#xff1a; GBK、GB2312&#xff1a;中文的国标编码&#xff0c;其中GBK包含简体中文与繁体中文两种&#xff0c;而GB2312只包含简体中文&#xff1b; ISO8859-1&#xff1a;是国际编码&#xff0c;可以描述任何文字信息(中文需要转…

js实现双击后网页自己主动跑-------Day55

公司的界面设计环节总算是告一段落了&#xff0c;必需要承认的是&#xff0c;这段时间晚间的学习带给我非常多益处。在工作中偶尔的应用&#xff0c;效果出奇的好&#xff0c;收到领导和同事的一些小赞扬&#xff0c;表示非常欣慰&#xff0c;也长了点不少自信&#xff0c;尽管…

2022-2028年中国高等职业教育产业投资分析及前景预测报告

【报告类型】产业研究 【报告价格】4500起 【出版时间】即时更新&#xff08;交付时间约3个工作日&#xff09; 【发布机构】智研瞻产业研究院 【报告格式】PDF版 本报告介绍了中国高等职业教育行业市场行业相关概述、中国高等职业教育行业市场行业运行环境、分析了中国高…

「轻松支付,只需几步」使用 LeanCloud 云代码接入支付宝示例

如果你的应用想接入支付宝&#xff0c;让用户可以在应用内部直接支付&#xff0c;你可以看下这篇文档和开源项目&#xff0c;也许会给你带来一些帮助。 项目&#xff1a;https://github.com/leancloud/cloud-code-alipay 了解支付宝「即时到账收款」 在尝试该项目之前&#xff…

quartz定时任务开发cron常用网站

http://cron.qqe2.com/ cron表达式 只能看下5个时点http://www.cronmaker.com/ 能看500个时点https://unixtime.51240.com/unix时间戳 quartz定时任务开发常常需要用到一些工具。 如cron表达式的构造&#xff0c;绝对时间&#xff0c;时间戳的定位&#xff0c;单调的时候要看…

UE5使用MetaHuman构建超现实的角色

使用免费的MetaHuman创造者应用程序为虚幻构建超现实的角色。 流派:电子学习| MP4 |视频:h264&#xff0c;1280720 |音频:AAC&#xff0c;48.0 KHz 语言&#xff1a;英语中英文字幕&#xff08;根据原英文字幕机译更准确&#xff09;|大小解压后:1.66 GB 含课程文件|时长:1h 49…

Java学习总结:46(内存流)

内存流 在Java中&#xff0c;针对内存操作提供了以下两组类&#xff1a; 字节内存流&#xff1a;ByteArrayInputStream(内存字节输入流)、ByteArrayOutputStream(内存字节输出流)&#xff1b;字符内存流&#xff1a;CharArrayReader(内存字符输入流)、CharArrayWriter(内存字…

数据结构之shell排序

希尔排序是插入排序的一种类型&#xff0c;也可以用一个形象的叫法缩小增量法。基本思想就是把一个数组分为好几个数组&#xff0c;有点像分治法&#xff0c;不过这里的划分是用一个常量d来控制。 这个0<d<n,n为数组的长度。这个算法有了插入排序的速度&#xff0c;也可以…

2022-2028年中国高纯铜市场研究及前瞻分析报告

【报告类型】产业研究 【报告价格】4500起 【出版时间】即时更新&#xff08;交付时间约3个工作日&#xff09; 【发布机构】智研瞻产业研究院 【报告格式】PDF版 本报告介绍了中国高纯铜行业市场行业相关概述、中国高纯铜行业市场行业运行环境、分析了中国高纯铜行业市场…

【百度地图API】如何制作班级地理通讯录?LBS通讯录

原文:【百度地图API】如何制作班级地理通讯录&#xff1f;LBS通讯录摘要&#xff1a;班级通讯录必备的功能&#xff0c;比如人员列表&#xff0c;人员地理位置标注&#xff0c;展示复杂信息窗口&#xff0c;公交和驾车等。一般班级人员都不会超过300个&#xff0c;因为可以高效…

Windows Azure Virtual Network (6) 设置Azure Virtual Machine固定公网IP (Virtual IP Address, VIP) (1)...

《Windows Azure Platform 系列文章目录》 注意&#xff1a;本文介绍的是Global Azure (http://www.windowsazure.com)&#xff0c;如果你使用的是由世纪互联运维的Azure China&#xff0c;请参考下面的连接。 Azure China (8) 使用Azure PowerShell创建虚拟机&#xff0c;并设…

如何正确的学习Blender-入门到精通课程

流派:电子学习| MP4 |视频:h264&#xff0c;1280720 |音频:AAC&#xff0c;44.1 KHz 语言&#xff1a;英语中英文字幕&#xff08;根据原英文字幕机译更准确&#xff09; |大小解压后:17.8 GB 含课程文件 |时长:21小时 27分 在Blender中学习3D建模、材质、灯光、渲染和动画&…