【发布时间】:2018-01-31 15:21:12
【问题描述】:
假设我有一个枚举:
public enum MyEnum {
SUCCESS;
}
我还有一个字符串表示为 byte[]:
byte[] bytes = aString.getBytes(Charset.forName("UTF8"));
我需要一种机制,将 2 byte[] 组合成一个数组,枚举后跟字符串,然后从另一端检索数据。我能想到的唯一方法是将枚举转换为已知的固定大小字节 []。 然后,当我从给定的 byte[] 中提取数据时,我知道第一个 x 代表枚举,其余的代表字符串。然后我需要做的就是将 byte[] 的第一部分转换回枚举,其余部分转换为字符串:
new String(byte[],Charset)
任何有用的实用程序可以帮助我吗?
澄清:该机制需要非常快速,并且字符串的 byte[] 已经通过另一种机制提供。我需要为枚举创建一个 byte[],然后简单地将两者结合起来。在另一端,我需要将枚举的字节 [] 和字符串提取到单独的字节 [] 中。我需要将第一个 byte[] 转换为枚举,但表示字符串的第二个 byte[] 被传递到其他地方。因此我不想创建一个包含枚举和字符串的单个封装数据类,开销太大。
【问题讨论】:
-
目前还不清楚你在问什么,但听起来很像 hack/kludge。这可能是XY problem。如果您可以退后一步并展示您要完成的工作,我敢打赌会有一个更清洁的解决方案。
-
我正在处理一个以字节[] 的形式传递消息的遗留系统。在这种情况下,消息由 2 个元素组成,一个枚举和一个字符串。我需要将其中的一对转换成一个字节[],然后再转换成单独的枚举和字符串。
-
This answer 显示了使用 SerializationUtils 的示例。然后还有Java的标准序列化机制(通过
ObjectOutputStream)。 -
对不起,我应该在问题中提到,机制必须非常快,尽可能优化。我通常发现这些实用程序虽然非常有用,但不能用于需要每秒处理许多事务的系统。