【发布时间】:2013-05-01 14:54:20
【问题描述】:
我正在开发一个适应服务器-客户端架构的项目。在客户端和服务器之间传输的消息是字符串和字节数组的组合。我需要事先发送整条消息的大小。
查找字节数组的字节大小很简单,但是对于字符串则不然。显然,我可以将这些字符串转换为字节数组(考虑到编码)。但是,这些字符串可能很长,我不想为它们的副本分配内存(例如 getBytes() 分配一个新数组)。
我的问题是,执行以下操作最节省内存的方式是什么?
- 查找字符串的字节大小(使用 UTF-8 编码)
- 将该大小写入输出流
- 将字符串写入输出流
【问题讨论】:
-
试试 DataOutputStream。看javadoc
-
@andy 我会事先知道我要写的字符串的大小吗?
-
“长”有多长,你是否真的证明了复制所需的空间/时间令人望而却步?使用
CharsetEncoder(字节计数部分相当简单)可能是可行的,但我认为在你做任何更复杂的事情之前,有必要尝试证明最简单的方法是不够的。 -
@JonSkeet 我之前正在从事一个涉及解析 VCF 文件(> 1GB,DNA 遗传学的东西)的项目,并且必须做很多分析,我意识到垃圾收集器是多么草率所以从那时起我就对 Java 有点偏执了。
-
@mostruash:关键在于选择你的战斗。定义你的需求,实现最简单的代码,测试它,然后使用更复杂的代码如果你需要。
标签: java string sockets outputstream