Java I/O流之文件系统
一、全文概览在学习文件系统之前,需要了解下Java在I/O上的发展史:在Java7之前,打开和读取文件需要编写特别笨拙的代码,涉及到很多的InputStream、OutputStream等组合起来使用,每次在使用时或许都需要查一下文档才能记得如何打开一个文件;而在Java 7面世后,这些被人诟病的设计得到了巨大的改进,这些新元素被打包放在了java.nio.file之下。这个包对Java对文件的操作提升到了可以与其他编程语言媲美的程度。
本篇文章就主要学习记录下操作文件的两个基本组件:
文件或目录的路径-Path
文件本身-File
二、组件一:Path(路径)1、Path简介Path对象代表的是一个文件或目录的路径,它是在不同的操作系统和文件系统之上的抽象。它的目的是,我们不必要注意底层的操作系统,我们的代码不需要重写就能在不同的操作系统上工作 —来自:《OnJava-基础篇》
2、Path创建介绍完Path出现的目的后,我们再来看下如果获取Path。正是java.nio.file.Paths类下重载的static get方法,这个方法的参数可以是接受一个String序 ...
Java I/O流基础类介绍
一、全文概览
在我们日常工作中,或多或少会对文件进行各种各样的操作。有些我们是亲自去处理的,例如在我工作中,流量读取策略信息时,我们就是将策略存放到本地文件当中,在生成运行时策略信息的时候,我们会先从本地文件中读取;也有些是我们看不到被框架底层封装的,例如日志框架将日志写入磁盘,日志监控读取磁盘文件等操作。这些I/O流的操作涉及我们工作的方方面面,因此对它进行一定的学习是对我们有很大的帮助的,例如顺序读取、随机访问、缓冲、字符、按行读取、按字读取等等。
本文先从基础的I/O流入手,主要介绍包括基于字节的InputStream、OutputStream;基于字符的Reader、Writer以及自成一派的RandomAccessFile,他们的核心函数以及功能扩展的派生类。
二、InputStream
InputStream用于标识哪些从不同源生成的输入类,可能的源包括以下几种:
字节数组
字符串对象
文件
管道
其他流组成的序列
其他源,例如网络连接
1、InputStream核心函数解析这里就直接将InputStream抽象类函数粘贴过来,并增加函数功能注 ...
SpringBoot自动装配原理学习与实战运用
一、本文概览我们知道SpringBoot就是框架的框架,它解决了Spring在开发过程中繁琐的配置问题。例如在引入web、aop、data、cache等等场景,以往我们使用Spring时,会需要向容器中手动配置DispatchServlet、 AspectJAutoProxyingConfiguration等等配置类,而使用SpringBoot框架后,只需要引入spring-boot-starter-xxx的jar包,即可自动完成相关场景的配置。这项技术SpringBoot是如何帮助我们实现的呢?本篇文章就来详细聊聊其中的技术细节。
二、了解自动装配1、什么是自动装配首先我们通过一小段代码来了解一下使用SpringBoot完成自动装配的过程。
12345678@SpringBootApplicationpublic class SpringbootAutoconfigureApplication { public static void main(String[] args) { SpringApplication.run(SpringbootA ...
ProtocolBuffer源码分析(一个能实现数据压缩的序列化协议)
目录
在学习的过程当中,参考了很多高质量的博客,在此进行感谢,如果在内容中引用您的内容不当,请联系我删除,表示抱歉。
一、它是什么?1、简介Protocol Buffer(以下简称Protobuf)是由Google设计的一种高效、轻量级的信息描述格式,它具有语言中立、平台中立、高效、可扩展等特性。Protocol Buffer诞生之初是为了解决索引服务器端的请求、响应新旧协议(高低版本)兼容性问题,正如它的字面意思所示-“协议缓冲区”;后被Google开源出来,逐渐发展成用于传输数据场景。相比于json、xml,Protobuf的编码长度更短、传输效率更高。它非常适合用来做数据存储、RPC数据通信等工作。
Protobuf目前有两个版本:proto2和proto3,本章按照proto3的版本来进行学习记录的。
2、作用Protobuf起初用来解决谷歌内部服务器端的请求与响应新旧协议兼容性问题,后被谷歌(2008年)开源出来,经过不断优化,现在Protobuf非常适合用来做数据存储、RPC数据通信等工作。
Protobuf的工作流程很简单,一句话概括就是:通过将结构化数据进行序列化, ...
Lz4压缩算法学习
一、简介Lz4压缩算法是由Yann Collet在2011年设计实现的,lz4属于lz77系列的压缩算法。lz77严格意义上来说不是一种算法,而是一种编码理论,它只定义了原理,并没有定义如何实现。基于lz77理论衍生的算法除lz4以外,还有lzss、lzb、lzh等。
lz4是目前基于综合来看效率最高的压缩算法,更加侧重于压缩解压缩速度,压缩比并不突出,本质上就是时间换空间。
对于github上给出的lz4性能介绍:每核压缩速度大于500MB/s,多核CPU可叠加;它所提供的解码器也是极其快速的,每核可达GB/s量级。
二、算法思想lz77编码思想:它是一种基于字典的算法,它将长字符串(也可以称为匹配项或者短语)编码成短小的标记,用小标记代替字典中的短语,也就是说,它通过用小的标记来代替数据中多次重复出现的长字符串来达到数据压缩的目的。其处理的符号不一定是文本字符,也可以是其他任意大小的符号。
短语字典维护:lz77使用的是一个前向缓冲区和一个滑动窗口。它首先将数据载入到前向缓冲区,形成一批短语,再由滑动窗口滑动时,变成字典的一部分。
三、算法实现
作者没有看过lz ...
学习规划
前言2023年已经过了一半了,这个规划来的有点晚😭。其实在前半年,自己大多时间都浪费在了对未来职业发展的迷茫中,”程序员是吃青春饭的”、”知识太多太杂,学不过来,学了又忘”、”还只停留于写写业务需求,技术提升不上去”等。最近一段时间,对Java程序员这个职业做了一些思考,明确自己的发力点,给我自己提供方向,也希望能给看到这篇文章同样迷茫的你带来帮助。
技能地图从21年毕业到现在,已经有了两年的工作经验。我的工作偏向于推荐工程方向的软件开发。
平常能涉及到的技术栈主要包括如下部分:
在语言及其生态上:Java及其常用框架,例如Spring、SpringBoot、MyBatis
在开发平台上:使用Linux操作系统部署服务、查看日志等一些常见的运维操作
在数据存储上:利用的是公司根据淘宝开源Tair进行二开的缓存中间件
在离线部分:使用到的是HDFS存储数据,利用Hive-SQL查询记录进行日常的问题分析
上述技术栈离自己平常开发比较近,还有离得比较远的,例如调用ElasticSearch接口进行索引召回、利用Kafka进行数据传输(mq的作用,生产和消费)
在日常工作中,针对上述内 ...
《Spring 5.x源码解析之Spring AOP API整体的设计与实现》
学好路更宽,钱多少加班。—- mercyblitz
一、前言
大家好,欢迎阅读《Spring 5.x源码解析》系列,本篇作为该系列的第一篇,先入手AOP源码解析,后补齐IoC源码内容。文章内容基于小马哥讲 Spring AOP 编程思想以及Spring源码深度解析(第2版)。笔者多次阅读上述学习资料,形成个人关于Spring的知识总结,希望能帮助各位小伙伴!
二、本文概览
三、核心API介绍1、JoinPoint(连接点)
在Spring AOP中,有关连接点实现的API有以下几种:
对上述API,我们下面做下详细介绍:
JoinPoint-最顶层接口,在AOP术语中表示:程序运行时的连接点。运行时连接点是发生在静态连接点(程序真正发生调用的地方)上的事件。它包含以下几种方法:
Object proceed() : 进行链中下一个拦截器的动作
Object getThis() : 返回当前连接点所持有的静态对象实例
AccessiblePart getStaticPart() : 返回当前连接点所在的静态代码块
Invocation-继承JoinPoint,并提供获取目 ...
《Spring 5.x源码解析之Spring AOP 注解驱动使用及其实现原理》
学好路更宽,钱多少加班。—- mercyblitz
一、前言
大家好,欢迎阅读《Spring 5.x源码解析》系列,本篇作为该系列的第二篇,重点介绍Spring AOP在注解驱动编程模式上的使用及其实现原理。文章内容基于小马哥讲 Spring AOP 编程思想以及Spring源码深度解析(第2版)。笔者多次阅读上述学习资料,形成个人关于Spring的知识总结,希望能帮助各位小伙伴!
二、本文概览
三、使用示例
在本节,我们详细介绍Spring AOP所支持的AspectJ注解使用,在目标方法拦截上介绍@Before、@After、@AfterReturning、@AfterThrowing、@Around、@DeclareParents以及在切入点表达式上介绍execution、within、target、this、args、@args、@target、@within、@annotation的使用
1、@Aspect该注解的作用就是定义该类是一个切面,在Spring IoC容器会根据Aspect标记拿出该类,创建对应的Advisor,详细动作会在下节实现原理说。
2、AOP通知 ...