首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将字符串写入套接字的输出流

将字符串写入套接字的输出流
EN

Stack Overflow用户
提问于 2013-05-01 14:54:20
回答 3查看 132关注 0票数 3

我正在从事一个适应服务器-客户端架构的项目。在客户端和服务器之间传输的消息是字符串和字节数组的组合。我需要事先发送整个信息的大小。

查找字节数组的字节大小是很简单的,但是对于字符串却不是这样。显然,我可以将这些字符串转换为字节数组(考虑到编码)。但是,这些字符串可能很长,我不想为它们的副本分配内存(例如,getBytes()分配一个新数组)。

我的问题是,做以下事情的最有效的记忆方式是什么?

  1. 查找字符串的字节大小(使用UTF-8编码)
  2. 将此大小写入输出流。
  3. 将字符串写入输出流
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-05-01 15:05:01

逐字符迭代字符串。为每个位置调用codePointAt()以获取其unicode代码点。根据代码点的不同,您可以推断在UTF-8中编码时需要多少字节:

代码语言:javascript
复制
Codepoint range | UTF-8 bytes
-----------------------------
0     - 127     |  1
128   - 2047    |  2
2048  - 65535   |  3
65536 +         |  4

但是在您这样做之前,您应该首先验证这是否真的是必要的。传递给套接字的字符串很可能在内部复制到字节数组。

票数 1
EN

Stack Overflow用户

发布于 2013-05-01 15:15:39

如果大小不是关键问题,则对字符串使用UTF16 16-BE编码。在这种情况下,大小将是字符串长度* 2。

在这种模式下,您可以一个接一个地编写Java字符,而不需要进行额外的处理(Unicode、高-低代理等)。

票数 1
EN

Stack Overflow用户

发布于 2013-05-01 15:18:45

您总是可以在数据包中“破坏”您的消息,所以您可以为消息的某些部分进行计算和内存分配,然后迭代到另一个部分,然后再这样做。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16320505

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档