0 не является «символом конца строки».Это просто байт.Независимо от того, идет ли он только в конце строки, зависит от того, какую кодировку вы используете (и какой текст может быть).Например, если вы использовали UTF-16, каждый второй байт будет равен 0 для символов ASCII.
Если вы уверены , что первый 0 указывает на конец строки, вы можетеиспользуйте что-то как код, который вы дали, но я бы переписал его как:
int size = 0;
while (size < data.length)
{
if (data[size] == 0)
{
break;
}
size++;
}
// Specify the appropriate encoding as the last argument
String myString = new String(data, 0, size, "UTF-8");
Я настоятельно рекомендую не просто использоватьКодировка платформы по умолчанию - она не переносимая и может не допускать использования всех символов Юникода.Однако вы не можете просто принять произвольное решение - вам нужно убедиться, что все, что производит и потребляет эти данные, согласуется с кодировкой.
Если вы управляете протоколом, это будет много лучше, если бы вы могли ввести префикс длины перед строкой, чтобы указать, сколько байтов находится в закодированной форме.Таким образом, вы сможете прочитать точно правильный объем данных (без «перечитывания») и сможете определить, были ли данные усечены по какой-то причине.