Java基础定时器、UUID、加密、转换流4月打卡day21
Java基础之多线程(综合案例)4月打卡day21
关于作者
-
作者介绍
🍓 博客主页:
🍓 简介:JAVA领域优质创作者🥇、一名在校大三学生🎓、在校期间参加各种省赛、国赛,斩获一系列荣誉🏆。
🍓 关注我:关注我学习资料、文档下载统统都有,每日定时更新文章,励志做一名JAVA资深程序猿👨💻。
1、定时器
推动整个计算机硬件的发展的核心关键性技术就是时钟。所以在企业开发中定时操作往往成为开发重点。而在JDK本身也支持这种定时调度的处理操作,这种操作不会直接使用。还是和多线程有关。
如果想要定时调度处理操作,需要两个类
-
定时调度任务:java.util.TimerTask
-
定时调度操作:java.util.Timer
package com.day14.demo;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Timer;
import java.util.TimerTask;
class MyTask extends TimerTask{
@Override
public void run() {
// TODO Auto-generated method stub
System.out.println(new SimpleDateFormat("YYYY-MM-dd HH:mm:ss.SSS").format(new Date()));
}
}
public class TaskDemo {
public static void main(String[] args) {
Timer timer = new Timer();
timer.schedule(new MyTask(), 1000,2000);
}
}
2、UUID类
UUID类是根据你当前的地址还有时间戳自动生成一个几乎不会重复的字符串。
package com.day14.demo;
import java.util.UUID;
public class UUIDDemo {
public static void main(String[] args) {
UUID uuid = UUID.randomUUID();
System.out.println(uuid);
}
}
以后再文件上传等类似的操作中通过UUID类来进行简单的文件名称,以防止重名的问题。
3、Base64加密处理
Base64是一种数据加密算法,使用整个算法可以使我们的数据进行安全处理。如果要想进行加密处理可以使用两个:加密器、解密器。
加密处理
package com.day14.demo;
import java.util.Base64;
public class Base64Demo {
public static void main(String[] args) {
String msg = "123456";
String emsg = Base64.getEncoder().encodeToString(msg.getBytes());
System.out.println("加密:" + emsg);
byte[] decode = Base64.getDecoder().decode(emsg);
System.out.println("解密:" + new String(decode));
}
}
多次加密
package com.day14.demo;
import java.util.Base64;
public class Base64Demo {
public static void main(String[] args) {
String msg = encode("123456");
String emsg = encode(encode(encode(msg)));
System.out.println("加密:" + emsg);
byte[] decode = Base64.getDecoder().decode(emsg);
System.out.println("解密:" + new String(decode));
}
public static String encode(String code){
return Base64.getEncoder().encodeToString(code.getBytes());
}
}
还有一个做法就是种子树
package com.day14.demo;
import java.util.Base64;
public class Base64Demo {
public static void main(String[] args) {
String sed = encode("zsr--rsz");
String msg = "123456"+sed;
String emsg = encode(msg);
System.out.println("加密:" + emsg);
byte[] decode = Base64.getDecoder().decode(emsg);
System.out.println("解密:" + new String(decode));
}
public static String encode(String code){
return Base64.getEncoder().encodeToString(code.getBytes());
}
}
必须保证长度,以后的开发将Base64和MD5一起开发,长度是32位。
4、转换流
现在对于IO操作就存在了字节流和字符流两种操作,那么对于这两种操作流之间也是可以进行转换的,而转换的操作类有两个:
将字节输出流变为字符输出流(OutputStream->Writer):OutputStreamWriter;
将字节输入流变为字符输入流(InputStream->Reader):InputStreaReader。
OutputStreamWriter | InputStreamReader |
---|---|
public class OutputStreamWriter extends Writer | public class InputStreamReader extends Reader |
public OutputStreamWriter(OutputStream out) | public InputStreamReader(InputStream in) |
通过以上的继承结构和构造方法可以清楚发现,既然OutputStreamWriter是Writer的子类,那么必然OutputStreamWriter可以通过Writer类执行对象的向上转型进行接收,而同时这个OutputStreamWriter类的构造方法可以接收OutputStream,这样就可以完成转型。
将字节输出流变为字符输出流
package com.day14.demo;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.Writer;
public class OutWriterDemo {
public static void main(String[] args) throws Exception {
//1.定义文件路径
File file = new File("f:" + File.separator + "test" + File.separator + "hello.txt");
if(!file.getParentFile().exists()){//父路径不存在
file.getParentFile().mkdirs();//创建父目录
}
//2.要输出的数据
String str = "Hello,world!!!!";
//3.实例化对象
OutputStream stream = new FileOutputStream(file,true);
//4.将内容写进stream
Writer out = new OutputStreamWriter(stream);
out.write(str);
//5.关闭流
out.close();
}
}
对于文件操作可以使用FileInputStream,FileOutputStream,FileReader,FileWriter四个类,那么下面分别观察这四个类的继承结构。
观察FileInputStream,FileOutoutStream类的继承结构
FileInputStream | FileOutoutStream |
---|---|
java.lang.Object java.io.InputStream java.io.FilterInputStream | java.lang.Object java.io.OutputStream java.io.FileOutputStream |
观察FileReader,FileWriter类的继承结构
FileReader | FileWrite |
---|---|
java.lang.Object java.io.Reader java.io.InputStreamReader java.io.FileReader | java.lang.Object java.io.Writer java.io.OutputStreamWriter java.io.FileWriter |
通过以上的继承关系也可以发现,实际上所有的字符数据都是需要进行转换的,依靠转换流完成,以后真正保存或者是传输的数据是不可能有字符的,全部都是字节,而字节只是在电脑之中处理后的结果。
- 点赞
- 收藏
- 关注作者
评论(0)