你想让我做什么?
将短数据写入字节数组?
然后用 DataOutputStream 包装您的字节数组输出流,该流具有 writeShort()、writeInt() 等方法。警告。我认为 DataOutputStream 的字节序是大字节序,所以如果你想使用小字节序,你要么自己写,要么使用其他选项:
ByteArrayOutputStream byteOut = new ByteArrayOutputStream();
DataOutputStream dataout = new DataOutputStream(byteOut)
dataout.writeShort(shortValue);
写一个简短的[]
最简单的就是创建一个ByteBuffer,然后用asShortBuffer()
方法把它看成一个ShortBuffer。ShortBuffer 有一个put(short)
和 put(short[]);
如果你想用 Little endian 写出短数据,ByteBuffer 有一个方法asOrder(ByteOrder)
可以改变它正在读取或写入的数据的 endian。
//NOTE length should be 2* num shorts since we allocate in bytes
ByteBuffer buf = ByteBuffer.allocate(length);
ShortBuffer shortBuf = buf.asShortBuffer();
shortBuf.put(shortValue);
shortBuf.put(shortArray);
从缓冲区中取出数据很烦人。有可选array()
方法,但并非所有缓冲区执行都支持它们,因此您必须执行以下操作:
//once all data written to buffer
shortBuf.flip();
short[] dataOut = new short[shortBuf.remaining()];
shortBuf.get(dataOut);
两者结合以在未知输入大小上使用 ShortBuffer
如果您不知道要写入多少字节,并且没有合理的最大长度,那么您可能需要结合使用这两个选项。首先,使用选项#1 通过向字节缓冲区写入短裤来动态增长字节缓冲区。然后使用 ShortBuffer 将 byte[] 转换为 short[]。
ByteArrayOutputStream byteOut = new ByteArrayOutputStream();
DataOutputStream dataout = new DataOutputStream(byteOut)
dataout.writeShort(shortValue);
...
ShortBuffer buf =ByteBuffer.wrap(byteOut.toByteArray())
.asShortBuffer();
int length = buf.remaining();
short[] asShorts = new short[length];
buf.get(asShorts);
由于您制作了数组的副本,因此它并不漂亮并且使用了 2 倍的内存。