最近由于一个项目需要和单片机通信,和硬件工程师沟通好之后,大致确定协议为 : 消息头部 + 消息长度 + 设备号 + 命令 + data + crc16 由于netty自带的decoder有些不满足这个格式,所以自定义了一个decoder。 代码如下 /** * 消息格式为 消息头部(1字节) + 消息长度(2字节) + 设备号(12字节) + 命令(2字节) + data(n字节) + crc16(2字节) * * @author watermelon * @time 2020/5/21 */ public c...... Read More →
BIO: blocking I/O 。 BIO就是传统I/O,其相关的类和接口在 java.io 包下BIO 是 同步阻塞 IO ,服务器实现模式为一个连接一个线程,即客户端有连接请求时服务器端就需要启动一个线程进行处理,如果这个连接不做任何事情会造成不必要的线程开销,可以通过线程池机制改善(实现多个客户连接服务器) BIO问题: 每个请求都需要创建独立的线程,与对应的客户端进行数据 Read,业务处理,数据 Write 。当并发数较大时,需...... Read More →
最近看了设计模式和锁的一些知识,就想着自己写点什么巩固一下知识。 然后就随便写了一个类似(也许不像)连接池的这么一个demo。 定义一个连接类 Connection,用户查询操作,里边有 这样几个方法,刚开始在池中是直接用isFree()判断状态,然后在用setState()方法改变状态的,发现这样不好保证原子操作,所以增加了checkAndSetStates()方法。 定义函数式接口 Content(用于接收连接后的具体查询操作): ...... Read More →
记录一下linux下spring boot项目的一键式部署。项目代码存在在码云,部署脚本从gitee中拉取最新代码。 新建package.sh和start.sh 两个可执行文件: touch package.sh touch start.sh 文件夹下出现了这两个文件。 接下来赋予这两个文件可执行权限: chmod +x package.sh chmod +x start.sh 看见两个文件变成了绿色,证明它们拥有了可执行的权限。 之后我们开始编辑package.sh: vim package.sh ...... Read More →
前言在介绍spring boot之前,先介绍一下spring以及它的优劣。 spring的强大相信用过的大家都有所了解。不过spring的一大缺点就是配置文件太多了,一度被大家称之为“配置地狱”!spring boot 的理念就是习惯优于配置,约定大约配置。 一、 spring boot的优点:1、基于SpringSpring Boot基于Spring,所以Spring有的优点Spring Boot也有,不需要开发人员去学习一个全新的框架,学习门槛相对降低。 2、配置简单S...... Read More →
需要依赖: <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>3.14</version> </dependency> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml</artifactId> <version>3.14</version> </dependency> 工具类: /** * 导出excel * * @param response * @par...... Read More →