Вы можете использовать ByteBuffer
и использовать свой текущий массив байтов, а затем использовать методы, которые приходят с ней, чтобы получить следующий float, int и т. д. (например, buffer.getInt
и buffer.getFloat
).
Вы можете получить часть своего байтового массива при создании нового байтового буфера с помощью метода wrap
, который я считаю. Возможности безграничны :). Для того, чтобы получить строки, как вы просили, вам просто нужно сделать что-то вроде:
byte[] name = new byte[nameLength];
buffer.get(name);
nameString = byteRangeToString(name);
где byteRangeToString способ вернуть новый строковое представление байт [] данных, передать его.
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() может запустить вас в памяти вопросы, если они используются чрезмерно.
Как долго длинные поля? Получено ли это из сокета или локально читается из файла? – stacker
Поле длины содержит один байт, и оно будет меняться. – mcd