OOS

哈夫曼编码—文件的压缩与解压(Java)

若如初见. 提交于 2020-08-08 20:58:53
哈夫曼编码—文件的压缩与解压(Java) <!-- more --> 博客说明 文章所涉及的资料来自互联网整理和个人总结,意在于个人学习和经验汇总,如有什么地方侵权,请联系本人删除,谢谢! 压缩代码 package cn.guizimo.huffmancode; import java.io.*; import java.util.*; /** * @author guizimo * @date 2020/8/8 11:55 上午 */ public class HuffmanCode { public static void main(String[] args) { String zipFile = "d://123.png"; String dstFile = "d://123.zip"; zipFile(zipFile, dstFile);; System.out.println("压缩成功!"); } public static void unZipFile(String zipFile, String dstFile) { InputStream is = null; ObjectInputStream ois = null; OutputStream os = null; try { is = new FileInputStream(zipFile); ois =

吐血整理全网最全的单例模式

两盒软妹~` 提交于 2020-08-07 19:11:26
前言 之前文章已经说过了设计模式的七大原则,即接口屏蔽原则,开闭原则,依赖倒转原则,迪米特原则,里氏替换原则,单一职责原则,合成复用原则,不明白的,可以移至万字总结之设计模式七大原则( https://www.cnblogs.com/chenchen0618/p/12434603.html )。从今天开始我们就要学习一些常见的设计模式,方便我们以后看源码使用,当然,也可以指导我们平常的编码任务。 我们常见的设计模式主要有23种,分为3种类型,咱也不全说,只写重要的几个把。 创建型:单例模式,工厂模式,原型模式 结构型:适配器模式,装饰模式,代理模式 行为型:模板模式,观察者模式,状态模式,责任链模式 单例模式的概念和作用 概念 系统中只需要一个全局的实例,比如一些工具类,Converter,SqlSession等。 为什么要用单例模式? 只有一个全局的实例,减少了内存开支,特别是某个对象需要频繁的创建和销毁的时候,而创建和销毁的过程由jvm执行,我们无法对其进行优化,所以单例模式的优势就显现出来啦。 单例模式可以避免对资源的多重占用,避免出现多线程的复杂问题。 单例模式的写法重点 构造方法私有化 我们需要将构造方法私有化,而默认不写的话,是公有的构造方法,外部可以显式的调用来创建对象,我们的目的是让外部不能创建对象。 提供获取实例的公有方法 对外只提供一个公有的的方法,用来获取实例

史上最全单例模式的写法以及破坏单例方式

穿精又带淫゛_ 提交于 2020-08-06 13:47:01
今天跟大家讲一个老生常谈的话题,单例模式是最常用到的设计模式之一,熟悉设计模式的朋友对单例模式都不会陌生。网上的文章也很多,但是参差不齐,良莠不齐,要么说的不到点子上,要么写的不完整,我试图写一篇史上最全单例模式,让你看一篇文章就够了。 单例模式定义及应用场景 单例模式是指确保一个类在任何情况下都绝对只有一个实例,并提供一个全局访问点。单例模式是创建型模式。许多时候整个系统只需要拥有一个全局对象,这样有利于我们协调系统整体的行为。 比如在某个服务器程序中,该服务器的配置信息存放在一个文件中,这些配置数据由一个单例对象统一读取,然后服务进程中的其他对象再通过这个单例对象获取这些配置信息。这种方式简化了在复杂环境下的配置管理。 我们写单例的思路是,隐藏其所有构造方法,提供一个全局访问点。 1、饿汉式 这个很简单,小伙们都写过,这个在类加载的时候就立即初始化,因为他很饿嘛,一开始就给你创建一个对象,这个是绝对线程安全的,在线程还没出现以前就实例化了,不可能存在访问安全问题。他的缺点是如果不用,用不着,我都占着空间,造成内存浪费。 public class HungrySingleton { private static final HungrySingleton hungrySingleton = new HungrySingleton(); private

ObjectUtils.java

a 夏天 提交于 2020-07-28 12:37:24
import lombok.extern.slf4j.Slf4j; import com.donkeycode.core.io.FastByteArrayOutputStream; import java.io.ByteArrayInputStream; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.lang.reflect.Array; import java.lang.reflect.InvocationTargetException; import java.util.*; import org.springframework.cglib.beans.BeanCopier; /** * 对象操作工具类 * * @author nanfeng * @date 2019年12月10日 * @since 0.0.1 */ @Slf4j public class ObjectUtils { /** * 比较两个对象是否相等。<br> * 相同的条件有两个,满足其一即可:<br> * <code> * 1. obj1 == null && obj2 == null; * 2. obj1.equals(obj2) * </code> * * @param obj1 *

这些年积攒的系统起不来以及root登陆异常排查的点

家住魔仙堡 提交于 2020-07-27 14:41:35
背景介绍: 最近在整理文档,这些年陆陆续续写了好多个不同排查点的文档去记录系统起不来,以及root登陆异常的案例,今天整理一下放出来,希望大家可以喜欢 系统启动异常: 1,部分centos启动黑屏,无异常报错的场景,可以fsck一下系统盘 2,根分区空间满,以及inode耗尽 3,升级内核或者从老的共享实例迁移到独享规格导致的启动异常 3.1 手动注入驱动 (mkinitrd virtio相关驱动 ) 3.2 修改grub 的启动顺序,优先尝试使用老内核启动 3.3 boot目录下面内核的关联文件是否全(下面仅为demo,不同系统内核版本文件不一致,部分内核版本boot下的i386目录也是有用的) config-4.9.0-7-amd64 initrd.img-4.9.0-7-amd64 System.map-4.9.0-7-amd64 vmlinuz-4.9.0-7-amd64 3.4 /boot/grub/device.map里面的hda改成vda 4,fstab/grub中的 uuid不对,可以直接修改为/dev/vda1这种形式尝试 数据盘分区异常加载起不来的场景,可以去注释ftab所有的行,添加类似下面的启动项尝试,也适用用系统盘快照创建云盘挂载后,uuid一致导致的启动异常,改成非UUID的挂载即可 /dev/vda1 / ext4 defaults 1 1 5

Java创建对象的六种方法-权当记录一下

心已入冬 提交于 2020-05-09 01:09:09
1 简介 Java 是面向对象的编程语言,只要使用它,就需要创建对象。Java创建对象有六种方法,实际常用的不会这么多,这里权当是记录一下。 2 六种方法 (1)使用new关键字 Pumpkin p1 = new Pumpkin(); (2)反射之Class类newInstance() Pumpkin p2 = Pumpkin.class.newInstance(); (3)反射之Constructor类的newInstance() Pumpkin p3 = Pumpkin.class.getDeclaredConstructor().newInstance(); (4)Object对象的clone方法 Pumpkin p4 = (Pumpkin) p1.clone(); 注意 Object 类的 clone 方法是 protected 的,在 Override 的时候,可以改成 public ,这样让其它所有类都可以调用。 注意浅拷贝和深拷贝。 (5)反序列化 ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("object.bin")); oos.writeObject(p1); oos.close(); ObjectInputStream ois = new

Java之IO流

不羁岁月 提交于 2020-05-04 23:41:37
一、File类的使用 1. File类的理解 File类的一个对象,代表一个文件或一个文件目录(俗称:文件夹)。 File类声明在java.io包下:文件和文件路径的抽象表示形式,与平台无关。 File类中涉及到关于文件或文件目录的创建、删除、重命名、修改时间、文件大小等方法,并未涉及到写入或读取文件内容的操作。如果需要读取或写入文件内容,必须使用IO流来完成。 想要在Java程序中表示一个真实存在的文件或目录,那么必须有一个File对象,但是Java程序中的一个File对象,可能没有一个真实存在的文件或目录。 后续File类的对象常会作为参数传递到流的构造器中,指明读取或写入的"终点"。 2. File的实例化 2.1 常用构造器 File(String filePath) File(String parentPath,String childPath) File(File parentFile,String childPath) 代码示例 : @Test public void test1() { //构造器1 File file1 = new File("hello.txt"); File file2 = new File("E:\\workspace_idea\\JavaSenic\\IO\\hello.txt"); System.out.println(file1);

阿里“去 IOE”十二年,弹性计算如何二次去 I 和 E?

与世无争的帅哥 提交于 2020-04-28 20:25:53
云栖号资讯:【 点击查看更多行业资讯 】 在这里您可以找到不同行业的第一手的上云资讯,还在等什么,快来! 【CSDN 编者按】王坚院士曾讲过一句话让人印象深刻,他说「云计算的本质是服务,如果不能将计算资源规模化、大范围地进行共享,如果不能真正以服务的方式提供,就根本算不上云计算。」众所周知,阿里云是完全经历了从 0 到 1,再到 100 的过程,将计算发挥到极致背后有一个关键的服务,那就是弹性计算。 阿里云弹性计算是阿里云提供的 IaaS 级别云计算服务,它免去了客户采购 IT 硬件的前期准备,让客户像使用水、电、天然气等公共资源一样便捷、高效地使用计算资源,实现计算资源的即开即用和弹性伸缩。在「CSDN 在线峰会 —— 阿里云核心技术竞争力」上,阿里云研究员蒋林泉(花名:雁杨)深入分享了在众多大规模实践下百炼成钢的弹性计算。 复制链接可免费观看分享视频: https://edu.csdn.net/huiyiCourse/detail/1176 1.前言:弹性计算 More than just 虚拟机 一般而言,大家理解的弹性计算,可能首先会想到是虚拟机、云服务器。 但弹性计算除了是众所周知的 IaaS 的核心——云服务器 ECS 之外,还是一个完整的产品家族,而不只是虚拟机。 弹性计算不仅是阿里云的大底座,更是阿里巴巴集团的大底座,能够用强大的性能、稳定性、弹性

这份Java面试宝典,你值得拥有(2020版上篇)

送分小仙女□ 提交于 2020-04-24 18:39:32
一、Java 基础 1. JDK 和 JRE 有什么区别? JDK:Java Development Kit 的简称,java 开发工具包,提供了 java 的开发环境和运行环境。 JRE:Java Runtime Environment 的简称,java 运行环境,为 java 的运行提供了所需环境。 具体来说 JDK 其实包含了 JRE,同时还包含了编译 java 源码的编译器 javac,还包含了很多 java 程序调试和分析的工具。 简单来说:如果你需要运行 java 程序,只需安装 JRE 就可以了,如果你需要编写 java 程序,需要安装 JDK。 2. == 和 equals 的区别是什么? == 解读 对于基本类型和引用类型 == 的作用效果是不同的,如下所示: 基本类型:比较的是值是否相同; 引用类型:比较的是引用是否相同; 代码示例: 1 String x = "string"; 2 String y = "string"; 3 String z = new String("string"); 4 System.out.println(x==y); // true 5 System.out.println(x==z); // false 6 System.out.println(x.equals(y)); // true 7 System.out.println

Java的递归、IO流

一笑奈何 提交于 2020-04-22 04:39:10
一、递归 [递归]   1、 在函数自身内部,调用函数本身的方式,称为递归。    2、 注意: 递归包括递进去、归出来两步。     首先,依次执行【函数调自身语句】上半部分的代码,直到最里层。 {递进去}      然后,再从最里层开始,依次执行【函数调自身语句】下半部分的代码。 {归出来}   3、 递归必须通过合适的语句,及时的跳出。 否则,容易造成死循环。 public static int num=0; // 2 public static void test(){ System.out.println( "这是一个函数" ); num ++ ; if (num<=2 ){ test(); // if()不成立不再调用自己 } // 先执行三次 System.out.println("hahah"); // 执行完num大于2,hahah在执行之前的三次 } // test类 test(); 结果: 练习:5的阶乘 方法1: /** * 用递归实现5的! */ static int jie=1 ; public static long jiecheng( int n){ jie *= n; n -- ; if (n>=1 ){ jiecheng( 5 ); } return jie; } // Test类: System.out.println(jiecheng(5))