我有一个Java类,如:
class Foo implements IBar
{
// Methods ..
// A bunch of fields of primitive types (int, String)
int f1;
int f2;
String f3;
// ...
}
我想将所有这些字段打包到字节数组中(不要问我为什么,这个限制是由C ++方面引入的,它以这种格式向我发送数据)。
我找到的唯一方法是使用ByteBuffer
。但这是我能想到的最糟糕的事情。代码如下:
ByteBuffer buf = ByteBuffer.allocate(4);
int offset = 0;
buf.putInt(f1);
System.arraycopy(buf.array(), 0, rawHeader, offset, 4);
offset += 4;
// A bunch of lines here (pack all other fields)
有谁知道更合适的方式吗?感谢。
答案 0 :(得分:4)
使用DataOutputStream
包裹ByteArrayOutputStream
。
或者,如果您愿意,可以使用Serializable
创建类,并使用ObjectOutputStream
包裹ByteArrayOutputStream
。这当然会使字节数组只能被Java读取。
答案 1 :(得分:2)
嗯......你可以尝试DataOutputStream
而不是ByteBufferStream
,它有方便的方法来编写基元。退出时,你有字节数组。
UPD:当然不是ByteBufferStream
,而是ByteArrayOutputStream
。