File 二进制安全redis
Redis协议规范中提到:File 二进制安全redis,file,binary,redis,computer-science,File,Binary,Redis,Computer Science,Redis协议规范中提到: “状态回复不是二进制安全的,不能包含换行符。”字符串/文件的二进制安全意味着什么?为什么redis中的状态回复不能是二进制安全的呢?二进制安全字符串解析器在一个字符串中的单个字符中考虑所有可能的值0-255,该字符串可能不是以null结尾的(否则它的长度是已知的)。如果字符串解析器不是二进制安全的,那么它需要一个以null结尾的字符串(字符串末尾的二进制0) 通常,字符串解析器不是二进制安全的。许多语法分析需要正常的可打印字符和字符串末尾的0。如果这种字符串的末尾没有
“状态回复不是二进制安全的,不能包含换行符。”字符串/文件的二进制安全意味着什么?为什么redis中的状态回复不能是二进制安全的呢?二进制安全字符串解析器在一个字符串中的单个字符中考虑所有可能的值
0-255
,该字符串可能不是以null结尾的(否则它的长度是已知的)。如果字符串解析器不是二进制安全的,那么它需要一个以null结尾的字符串(字符串末尾的二进制0
)
通常,字符串解析器不是二进制安全的。许多语法分析需要正常的可打印字符和字符串末尾的0
。如果这种字符串的末尾没有0
,则很容易出现分段错误
二进制安全解析器可能正在解析任意数据(可能是文本或其他内容)
编辑:
“字符串/文件是二进制安全的意味着什么?”
- 文本解析器是二进制安全的,而不是字符串/文件本身。然而,如果一个字符串被称为二进制安全字符串,我怀疑这意味着它是一个以空结尾的字符串,带有标准ascii字符
- 因为检查回复的解析器实现在
的第一个实例处结束。这就是解析器计算字符串长度的方式。因此,如果它在回复结束之前找到\r\n
,它将停止解析并忽略之后的所有内容\r\n
除非状态回复需要发送二进制数据,否则它们就没有必要是二进制安全的。我想你的意思是:“但是,如果一个字符串被称为二进制安全的,我会怀疑这意味着它不是以null结尾的字符串。”@platypus我是这么说的。但我认为,因为它不是一个真正与字符串相关的术语,所以没有一个正确的答案。你的第一句话与你的句子相矛盾:“然而,如果一个字符串被称为二进制安全字符串,我会怀疑这意味着它是一个以null结尾的字符串…”“这个字符串可能不是以null结尾的”vs“我怀疑这意味着它是一个以null结尾的字符串“我没有自相矛盾。请注意字符串解析器和字符串本身之间的区别。字符串不是二进制安全的。在redis中,字符串解析器可能是二进制安全的,也可能不是二进制安全的。键的数据和键名都是二进制安全的。在这里,redis命令回复的不是二进制安全的,只是标准的ascii字符串,更容易处理