Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/go/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么protobuf在golang中使用byte[]表示字节,而在其他语言中使用string/ByteString表示字节?_Java_Go_Protocol Buffers - Fatal编程技术网

Java 为什么protobuf在golang中使用byte[]表示字节,而在其他语言中使用string/ByteString表示字节?

Java 为什么protobuf在golang中使用byte[]表示字节,而在其他语言中使用string/ByteString表示字节?,java,go,protocol-buffers,Java,Go,Protocol Buffers,如此处所述 protobuf在golang中使用byte[]表示字节,但在其他语言中使用string/ByteString表示字节,为什么会有差异 正如@Volker所解释的,字符串不适合保存任意[]字节 那么为什么pb在除go之外的所有其他语言中使用string/ByteString来表示字节呢? []字节对于字节流来说是自然的 Go中的字符串不是字节流,而是不可变字符串 Go中的字符串应该是UTF-8编码的,至少这是对它们进行测距的假设,在字符串中使用非UTF-8字节流是可能的,但有点不雅观

如此处所述

protobuf在golang中使用byte[]表示字节,但在其他语言中使用string/ByteString表示字节,为什么会有差异

正如@Volker所解释的,字符串不适合保存任意[]字节

那么为什么pb在除go之外的所有其他语言中使用string/ByteString来表示字节呢?

  • []字节对于字节流来说是自然的
  • Go中的字符串不是字节流,而是不可变字符串

  • Go中的字符串应该是UTF-8编码的,至少这是对它们进行测距的假设,在字符串中使用非UTF-8字节流是可能的,但有点不雅观
  • Go中没有ByteString类型。实际上有:[]字节

但还是有点困惑1。[]字节对于字节流来说是自然的,我完全同意你的看法。但是为什么pb对字节使用string/ByteString,而不是直接使用byte[]。我读了,但它没有解释为什么字符串而不是字节[]。Go中的字符串应该是UTF-8编码的,至少这是在其他语言中的字符串(如java s)也绑定到字符集,并且不适合保存任意字节[]@MichaelShy java和Go之间有区别。围棋中没有ByteString。为什么Java使用ByteString而不是[]字节(Java)的问题与Go无关。基本上这里没有什么可看或可知道的。不管怎样,谢谢你,你的回答确实帮助我更好地理解这一点;)