Channel.write 和 ChannelHandlerContext.write 的区别
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Channel.write 和 ChannelHandlerContext.write 的区别相关的知识,希望对你有一定的参考价值。
ChannelHandlerContext的writeAndFlush方法会将数据写到ChannelPipeline中当前ChannelHandler的下一个ChannelHandler开始处理。而Channel的writeAndFlush方法会将数据写到ChannelPipeline中最后一个ChannelHandler然后数据从尾部开始向头部方向流动会经过所有的ChannelHandler, ChannelPipeline中的所有ChannelHandler都可以处理数据。 参考技术A 结果输出到hdfs上,你必须从hdfs上下载到一般文件系统的txt才能看本回答被提问者采纳
shell中$()和 ` `${}${!}${#}$[] 和$(()),[ ] 和(( ))和 [[ ]]
1.$(command) 等价于 `command`
echo $(command) 执行过程:
shell扫描一遍命令行,发现了$(cmd)结构,便将$(cmd)中的cmd执行一次,得到其标准输出,再将此输出放到原来命令 echo $(ls)中的 $(ls)位置,即替换了$(ls),再执行echo命令。这里要注意的是$(cmd)中的命令的错误输出是不会被替换的,替换的只是标准输出
[root@192 shell_scripts]# echo $(pwd)
/home/liqing/shell_scripts
[root@192 shell_scripts]# echo $(pwd1)
bash: pwd1: 未找到命令...
相似命令是: pwd
2.$var 是变量替换;$ 用于变量替换。一般情况下,$var 与$var 并没有啥不一样。但是用 $ 会比较精确的界定变量名称的范围.
[root@192 shell_scripts]# uname=lisan
[root@192 shell_scripts]# echo $uname
lisan
#$ 会比较精确的界定变量名称的范围.
[root@192 shell_scripts]# echo $uname_a
lisan_a
[root@192 shell_scripts]# echo $uname_a
[root@192 shell_scripts]#
$ 的一些特异功能:从指定字符(子字符串)开始截取
file=/tmp/study/scripts/my.file.sh
格式 | 结果 | 说明 |
$string: start :length $file:0:5 | /tmp | 从 string 字符串的左边第 start 个字符开始,向右截取 length 个字符。 |
$string: start $file:5 | /study/scripts/my.file.sh | 从 string 字符串的左边第 start 个字符开始截取,直到最后。 |
$string: 0-start :length $file:0-8:5 | file. | 从 string 字符串的右边第 start 个字符开始,向右截取 length 个字符。 |
$string: 0-start $file:0-8 | file.sh | 从 string 字符串的右边第 start 个字符开始截取,直到最后。 |
$string#*chars $file#*/ | tmp/study/scripts/my.file.sh | 从 string 字符串第一次出现 *chars 的位置开始,截取 *chars 右边的所有字符。 |
$string##*chars $file##*/ | my.file.sh | 从 string 字符串最后一次出现 *chars 的位置开始,截取 *chars 右边的所有字符。 |
$string%*chars $file%*. | /tmp/study/scripts/my | 从 string 字符串第一次出现 *chars 的位置开始,截取 *chars 左边的所有字符。 |
$string%%*chars $file%%*. | /tmp/study/scripts/my.file | 从 string 字符串最后一次出现 *chars 的位置开始,截取 *chars 左边的所有字符。 |
3.$!var是引用间接变量;如下:
[root@192 shell_scripts]# var1="var2"
[root@192 shell_scripts]# var2="This is a dog"
[root@192 shell_scripts]# echo $var1
var2
[root@192 shell_scripts]# echo $var2
This is a dog
[root@192 shell_scripts]# echo $!var1
This is a dog
[root@192 shell_scripts]#
4.$#var 可计算出变量的长度:
[root@192 shell_scripts]# var2="This is a dog"
[root@192 shell_scripts]# echo $#var2
13
5.$[]与\\$(())用途一致:用来作整数运算。在 bash 中,$(( ))的整数运算符号大致有这些: \\ + - * / % & | ^ ! AND、OR、XOR、NOT运算
注意:这种扩展计算是整数型的计算,不支持浮点型和字符串等。
[root@192 shell_scripts]# echo $((3+2))
5
[root@192 shell_scripts]# echo $((3.0+2))
bash: 3.0+2: 语法错误: 无效的算术运算符 (错误符号是 ".0+2")
[root@192 shell_scripts]# echo $[3/2]
1
[root@192 shell_scripts]# echo $[3/2.0]
bash: 3/2.0: 语法错误: 无效的算术运算符 (错误符号是 ".0")
若是逻辑判断,表达式为真则为1,假则为0
[root@192 shell_scripts]# echo $((1>2))
0
[root@192 shell_scripts]# echo $((1<2))
1
[root@192 shell_scripts]# echo $[3>2]
1
[root@192 shell_scripts]# echo $[3>20]
0
三目运算以及重定义变量值
[root@192 shell_scripts]# a=1
[root@192 shell_scripts]# echo $[a++]
2
[root@192 shell_scripts]# echo $((a++))
3
[root@192 shell_scripts]#
6.[] (( ))及[[ ]]:即为test命令的另一种形式。
但要注意许多:
- 你必须在左括号的右侧和右括号的左侧各加一个空格,否则会报错。
- test命令使用标准的数学比较符号来表示字符串的比较,而用文本符号来表示数值的比较。很多人会记反了。使用反了,shell可能得不到正确的结果
- 大于符号或小于符号必须要转义,否则会被理解成重定向。
(( ))及[[ ]] :
它们分别是[ ]的针对数学比较表达式和字符串表达式的加强版。
其中(( )),不需要再将表达式里面的大小于符号转义,除了可以使用标准的数学运算符外,还增加了以下符号:
算术运算符 说明/含义
+、- 加法(或正号)、减法(或负号)
*、/、% 乘法、除法、取余(取模)
** 幂运算
++、-- 自增和自减,可以放在变量的前面也可以放在变量的后面
!、&&、|| 逻辑非(取反)、逻辑与(and)、逻辑或(or)
<、<=、>、>= 比较符号(小于、小于等于、大于、大于等于)
==、!=、= 比较符号(相等、不相等;对于字符串,= 也可以表示相当于)
<<、>> 向左移位、向右移位
~、|、 &、^ 按位取反、按位或、按位与、按位异或
=、+=、-=、*=、/=、%= 赋值运算符,例如 a+=1 相当于 a=a+1,a-=1 相当于 a=a-1
7.区别()和:
- 相同点:
()和都是把一串的命令放在括号里面,如果命令在一行,则命令之间用;隔开
- 不同点:
()只是把一串命令重新开一个子shell进行执行,不影响当前shell环境;对一串命令在当前shell执行,影响当前shell环境
()最后一个命令不用分号,最后一个命令要用分号
()里的第一个命令和左边括号不必有空格,的第一个命令和左括号之间必要要有一个空格
()和中括号里面的某个命令的重定向只影响改名了,但括号外的重定向则影响到括号里的所有命令
#不影响当前shell环境
[root@192 shell_scripts]# (pwd;cd /tmp;pwd)
/home/liqing/shell_scripts
/tmp
[root@192 shell_scripts]#
#()最后一个命令不用分号 ()最后一个命令不用分号 ()里的第一个命令和左边括号不必有空格
[root@192 shell_scripts]# (pwd;cd /home/liqing/shell_scripts;pwd)
/home/liqing/shell_scripts
/home/liqing/shell_scripts
[root@192 shell_scripts]#
[root@192 shell_scripts]# pwd;cd /tmp;pwd;
/home/liqing/shell_scripts
/tmp
[root@192 tmp]#
[root@192 tmp]# (pwd;cd /home/liqing/shell_scripts;pwd)
/tmp
/home/liqing/shell_scripts
#的第一个命令和左括号之间必要要有一个空格
[root@192 tmp]# pwd;cd /home/liqing/shell_scripts;pwd
bash: pwd: 未找到命令...
相似命令是: pwd
bash: pwd: 未找到命令...
相似命令是: pwd
#对一串命令在当前shell执行,影响当前shell环境
[root@192 shell_scripts]#
#最后一个命令要用分号
[root@192 shell_scripts]# pwd;cd /home/liqing/shell_scripts;pwd
>
> ^C
[root@192 shell_scripts]# pwd;cd /home/liqing/shell_scripts;pwd;
/home/liqing/shell_scripts
/home/liqing/shell_scripts
[root@192 shell_scripts]#
8.== 可用于判断变量是否相等,= 除了可用于判断变量是否相等外,还可以表示赋值。= 与 == 在 [ ] 中表示判断(字符串比较)时是等价的;在 (( )) 中 = 表示赋值, == 表示判断(整数比较),它们不等价
以上是关于Channel.write 和 ChannelHandlerContext.write 的区别的主要内容,如果未能解决你的问题,请参考以下文章
netty:channel.write() 不成功,原因为空