分隔符

Netty解码的艺术

瘦欲@ 提交于 2019-11-26 23:41:48
什么是拆包/粘包:   TCP 粘包/拆包:   TCP 是一个“流”协议,所谓流,就是没有界限的一长串二进制数据。TCP 作为传输层协议并不了解上层业务数据的具体含义,它会根据TCP 缓冲区的实际情况进行数据包的划分,所以在业务上认为是一个完整的包,可能会被TCP 拆分成多个包进行发送,也有可能把多个小的包封装成一个大的数据包发送,这就是所谓的TCP 粘包和拆包问题。同样, 在Netty 的编码器中, 也会对半包和粘包问题做相应的处理。什么是半包, 顾名思义, 就是不完整的数据包, 因为netty 在轮询读事件的时候, 每次将channel 中读取的数据, 不一定是一个完整的数据包, 这种情况, 就叫半包。粘包同样也不难理解, 如果Client 往Server 发送数据包, 如果发送频繁很有可能会将多个数据包的数据都发送到通道中, 如果在server 在读取的时候可能会读取到超过一个完整数据包的长度, 这种情况叫粘包。有关半包和粘包, 如下图所示: 粘包问题的解决策略:   由于底层的TCP 无法理解上层的业务数据,所以在底层是无法保证数据包不被拆分和重组的,这个问题只能通过上层的应用协议栈设计来解决。业界的主流协议的解决方案,可以归纳如下: 消息定长,报文大小固定长度,例如每个报文的长度固定为200 字节,如果不够空位补空格; 包尾添加特殊分隔符

字符串split操作到底有多少坑

孤街醉人 提交于 2019-11-26 21:06:19
微信公众号 长字符串切分,取其中元素封装或者将封装信息组合成长字符串都是常规操作,但是这种长字符串往往是不可控的,如一个长字符串就是由一个元素组成,或者存在空字符串的元素,看似这并没有什么问题,但是使用不同工具类的 split 方法进行切分结果是完全不同的。不知道你是否遇到这样的坑,下面一起来看看。 String类自带的split方法 直接使用String本身自带的 split 方法,看对不同字符串的切分结果。 没有分隔符的字符串 //str = "1" public static void split2(String str) { String[] splits = str.split(","); for (String split : splits) { System.out.println("->" + split); } System.out.println("数组长度:" + splits.length); } 切分后结果是单个元素 ["1"] ,数组长度是1。 有分隔符,分隔符切分后没有空字符串出现 //str = "1,2" //代码同上…… 切分后结果是 ["1","2"] ,数组长度是2。(假设分隔符是n个,分割后的元素个数是n+1个) 有分隔符,分隔符切分后有空字符串出现 //str = "1,,2" //代码同上…… 切分后结果是 ["1","","2"]

python初体验-字符串方法

筅森魡賤 提交于 2019-11-26 21:01:46
一、字符串的索引位置 和对待列表一样,我们也可以用 索引位置 来访问字符串中的字符。 user_info = ["小明", "23", "#斗地主", "@xiaoming1993", "阿强", "31", "#aas", "@aq_2019", "@username", "#第一中学"] user_email = [] for info in user_info: if info[0] == "@": # 如果元素开头为@ user_email.append(info) print(user_email) # 输出:['@xiaoming1993', '@aq_2019', '@username']例子中,我们通过 info[0] 取临时变量 info 中的第一个字符。二、截取字符串字符串的索引位置也是从0开始计算。 words = "风吹草低见牛羊" print(words[0:3]) # 输出:风吹草words[0:3] 截取 words 前三个字符——"风吹草"。三、字符串的联结将两个字符串用 + 联结起来,组成一个新的字符串。 string_1 = "吃葡萄不吐葡萄皮" string_2 = "不吃葡萄倒吐葡萄皮" print(string_1 + string_2) # 输出:吃葡萄不吐葡萄皮不吃葡萄倒吐葡萄皮四、字符串的长度可以用 len() 得到字符串的长度。

Golang学习 - path/filepath 包

狂风中的少年 提交于 2019-11-26 20:22:45
------------------------------------------------------------   filepath 中的函数会根据不同平台做不同的处理,比如路径分隔符、卷名等。 ------------------------------------------------------------ 路径分隔符转换: const ( Separator = os.PathSeparator // 路径分隔符(分隔路径元素) ListSeparator = os.PathListSeparator // 路径列表分隔符(分隔多个路径) )   下面两个函数主要用于将 Windows 路径分隔符转换为 Linux 路径分隔符,处理完后再转换回去,只在 Windows 中有用,在 Linux 中没必要: // 将 path 中平台相关的路径分隔符转换为 '/' ToSlash(path string) string // 将 path 中的 '/' 转换为系统相关的路径分隔符 FromSlash(path string) string func main() { s := `http://www.site.com/a/b/c/d` u, _ := url.Parse(s) s = u.Path // 下面这句用于 Windows 系统 s = filepath

StringTokenizer 简单的描述

吃可爱长大的小学妹 提交于 2019-11-26 20:17:28
查了下api文档:发现 StringTokenizer 是出于兼容性的原因而被保留的遗留类(虽然在新代码中并不鼓励使用它)。建议所有寻求此功能的人使用 String 的 split 方法或 java.util.regex 包。 既然已经不必提倡,代码尽量不要用这些;还是简单了解下用法:一般是3个方法一起用,迭代: 方法1: public StringTokenizer(String str, String delim, boolean returnDelims) 如果 returnDelims 标志为 true,则分隔符字符也作为标记返回。每个分隔符都作为一个长度为 1 的字符串返回。如果标志为 false,则跳过分隔符,只是用作标记之间的分隔符。 注意,如果 delim 为 null,则此构造方法不抛出异常。但是,尝试对得到的 StringTokenizer 调用其他方法则可能抛出 NullPointerException。 参数: str - 要解析的字符串。 delim - 分隔符。 returnDelims - 指示是否将分隔符作为标记返回的标志。 抛出: NullPointerException - 如果 str 为 null。 方法2: public String nextToken() 返回此 string tokenizer 的下一个标记。 返回: 此 string

awk学习笔记【转】

老子叫甜甜 提交于 2019-11-26 18:35:58
Awk学习笔记 整理:Jims of 肥肥世家 < jims.yang@gmail.com > Copyright © 2004 本文遵从GPL协议,欢迎转载、修改、散布。 第一次发布时间:2004年8月6日 Table of Contents 1. awk简介 2. awk命令格式和选项 2.1. awk的语法有两种形式 2.2. 命令选项 3. 模式和操作 3.1. 模式 3.2. 操作 4. awk的环境变量 5. awk运算符 6. 记录和域 6.1. 记录 6.2. 域 6.3. 域分隔符 7. gawk专用正则表达式元字符 8. POSIX字符集 9. 匹配操作符(~) 10. 比较表达式 11. 范围模板 12. 一个验证passwd文件有效性的例子 13. 几个实例 14. awk编程 14.1. 变量 14.2. BEGIN模块 14.3. END模块 14.4. 重定向和管道 14.5. 条件语句 14.6. 循环 14.7. 数组 14.8. awk的内建函数 15. How-to 1. awk简介 awk是一种编程语言,用于在linux/unix下对文本和数据进行处理。数据可以来自标准输入、一个或多个文件,或其它命令的输出。它支持用户自定义函数和动态正则表达式等先进功能,是linux/unix下的一个强大编程工具。它在命令行中使用,但更多是作为脚本来使用

将excel导入mysql(使用navicat)

廉价感情. 提交于 2019-11-26 18:23:11
excel: 注: 1、mysql里建立一张跟excel一样的表结构的表(包含id) 2、excel最好没有任何格式,只是纯值,不然会出现导入不了的错误 ------------------------------------------------------------------------------------------------ ① ② 注:选择文件路径的时候,一定要确保该excel被打开,不然会报下面的错: -------------------------------------------------------------------------------------------------------- ③ 注:选择子表 ------------------------------------------------------------------------------------------------------- ④ 注: 1、栏位名行:属性是第几行   第一个数据行:数据从第几行开始 (计数从 1 开始) 2、 日期分隔符‘ - ’和时间分隔符‘ : ’表示格式为' 2016-03-21 12:12:12 '的时间 ---------------------------------------------------------------

python-字符串常用方法

不羁的心 提交于 2019-11-26 18:07:23
字符串常用方法:    name = 'xiaoming.li' print(name.count('i')) #找某个元素出现的次数 print(name.index('o')) #找下标 3 Python split() 通过指定分隔符 对字符串进行切片 ,如果参数 num 有指定值,则分隔 num+1 个子字符串,注意: 默认为所有的空字符,包括空格、换行(\n)、制表符(\t)等。   tr = "Line1-abcdef \nLine2-abc \nLine4-abcd";   print str.split(); # 以空格为分隔符,包含 \n   print str.split(' ', 1 ); # 以空格为分隔符,分隔成两个   结果:   ['Line1-abcdef', 'Line2-abc', 'Line4-abcd']   ['Line1-abcdef', '\nLine2-abc \nLine4-abcd'] 4 python strip() 方法用于移除字符串头尾指定的字符( 默认为空格或换行符 )或字符序列,注意:该方法 只能删除开头或者结尾的字符 ,不能删除删除中间部分    的字符:  4.1 去除首尾字符:     str1 = "00003210Runoob012300000";     print(str1.strip('0'));#

python join函数

♀尐吖头ヾ 提交于 2019-11-26 17:15:41
1 函数:string.join() 2 3 Python中有join()和os.path.join()两个函数,具体作用如下: 4 join(): 连接字符串数组。将 字符串、元组、列表中的元素以指定的字符(分隔符)连接生成一个新的字符串 5 os.path.join(): 将多个路径组合后返回 6 7 一、函数说明 8 1、join()函数 9 10 语法: 'sep'.join(seq) 11 12 参数说明 13 sep:分隔符。可以为空 14 seq:要连接的元素序列、字符串、元组、字典 15 上面的语法即:以sep作为分隔符,将seq所有的元素合并成一个新的字符串 16 17 返回值:返回一个以分隔符sep连接各个元素后生成的字符串 18 19 20 21 2、os.path.join()函数 22 23 语法: os.path.join(path1[,path2[,......]]) 24 25 返回值:将多个路径组合后返回 26 27 注:第一个绝对路径之前的参数将被忽略 28 29 30 #对序列进行操作(分别使用' '与':'作为分隔符) 31 32 >>> seq1 = ['hello','good','boy','doiido'] 33 >>> print ' '.join(seq1) 34 hello good boy doiido 35 >>>

awk 分解行、字段

。_饼干妹妹 提交于 2019-11-26 15:20:34
1. 格式 格式: awk 'pattern {action} pattern {action}' filename 注:多个文件时,读取从左到右,读完第一个再读取第二个 pattern 1-/正则表达式/:使用通配符的扩展集。 2-关系表达式: 可以是字符串或数字的比较,如$2>$1选择第二个字段比第一个字段长的行。 3-模式匹配表达式:~ 匹配; ~! 不配置 4-BEGIN:让用户指定在第一条输入记录被处理之前所发生的动作,通常可在这里设置全局变量。 5-END:让用户在最后一条输入记录被读取之后发生的动作。 1.1 action //由一或多个命令、函数、表达式组成,之间由换行符\或;分号隔开,并位于大括号内。主要有四部份: 变量或数组赋值 输出命令 内置函数 控制流命令 也可以调用外部shell,使用system指令(参见详解知识点)。 -v var=val 变量, 可外部指定一个变量,在{}中使用 1.2 awk内部变量名 $0 完整的输入记录-即当期的完整行 $n 当前记录的第n个字段,字段间由FS分隔。 NF 每一行($0)拥有的字段数; NR 目前awk处理的是“总共第几行”数据;FNR 在当前文件的多少行!(多文件处理时用到) FS 指定被处理文件的分割字符,默认空格键,如 awk -F'[;:]' OFS 输出字段分隔符(默认值是一个空格)。awk -F:'