你好,我是java中字节操作的新手。我已经有流式格式的字节数组
1-> datapacketlength (length of name) (first byte)
2-> name (second byte + datapacket length)
3-> datapacketlength (length of datetime)
4-> current date and time
如何提取姓名和当前日期和时间。should i use Arrays.copyOfRange() method.
来自
MCD
答案 0 :(得分:2)
您可以使用ByteBuffer
并使用当前的字节数组,然后使用它附带的方法来获取下一个float,int等(例如buffer.getInt
和buffer.getFloat
)。
使用我认为的wrap
方法创建新的bytebuffer时,可以获取字节数组的一部分。可能性是无止境 :)。要按照要求获得字符串,您只需要执行以下操作:
byte[] name = new byte[nameLength];
buffer.get(name);
nameString = byteRangeToString(name);
其中byteRangeToString是一个返回传递的byte []数据的新字符串表示的方法。
public String byteRangeToString(byte[] data)
{
try
{
return new String(data, "UTF-8");
}
catch (UnsupportedEncodingException e)
{
/* handle accordingly */
}
}
请参阅:http://developer.android.com/reference/java/nio/ByteBuffer.html
如果过度使用,使用copyOfRange()可能会导致内存问题。
答案 1 :(得分:0)
如下:
int nameLength = 0;
int dateLength = 0;
byte[] nameByteArray;
byte[] dateByteArray
for(int i=0; i<bytesArray.length; i++){
if(i == 0){
nameLength = bytesArray[i] & 0xFF;
nameByteArray = new byte[nameLength];
}
else if(i == nameLength+1){
dateLength = byteArray[i] & 0xFF;
dateByteArray = new byte[dateLength];
}
else if(i < nameLength+1){
nameByteArray[i-1] = bytesArray[i];
}
else{
dateByteArray[i-(nameLength+1)] = bytesArray[i];
}
}
答案 2 :(得分:0)
您想使用DataInputStream。