我正在从事一个适应服务器-客户端架构的项目。在客户端和服务器之间传输的消息是字符串和字节数组的组合。我需要事先发送整个消息的大小。
查找字节数组的字节大小很简单,但对于字符串则不然。显然,我可以将这些字符串转换为字节数组(考虑到编码)。但是,这些字符串可能很长,我不想为它们的副本分配内存(例如 getBytes() 分配一个新数组)。
我的问题是,执行以下操作的内存效率最高的方法是什么?
- 查找字符串的字节大小(使用 UTF-8 编码)
- 将该大小写入输出流
- 将字符串写入输出流
最佳答案
逐个字符地迭代字符串。为每个位置调用 codePointAt()
以获取其 unicode 代码点。根据代码点,您可以推断出以 UTF-8 编码时需要多少字节:
Codepoint range | UTF-8 bytes
-----------------------------
0 - 127 | 1
128 - 2047 | 2
2048 - 65535 | 3
65536 + | 4
但在你这样做之前,你应该首先验证这是否真的有必要。无论如何,传递给套接字的字符串很可能在内部被复制到字节数组。
关于java - 将字符串写入套接字的输出流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16320505/