How can I create a String object from a byte array
byte arr[MAX_SIZE]; // Java
where one of the array elements is a C null terminating byt
It won't magically stop at the null terminator. The null character doesn't terminate strings in Java. You will have to find the index of the first null character and stop there. Use the String(byte[] arr, int offset, length)
constructor after that.
byte arr[] = ...
Charset charset = ...
int i;
for (i = 0; i < arr.length && arr[i] != 0; i++) { }
String str = new String(arr, 0, i, charSet);
Notes:
It is generally a good idea to use an explicit CharSet parameter so that your application doesn't depend on the platform's default characterset / encoding.
This won't work for some charsets. For instance, a UTF-16 encoded string can't safely be represented as a zero-terminated byte sequence because many code units contain zero bytes. (On the other hand, UTF-8 is OK provided that the string contains no instances of code point zero; see Can UTF-8 contain zero byte?)
... but I was wondering whether the String constructor will do this automatically.
No it / they won't. (Don't "wonder" ... read the javadoc :-))
I also assume the system's default charset will be used on all ends.
If you don't specify a charset, the Java platform's default will be used. This is likely to be the system default, but that is not guaranteed.
how about this:
String str = new String(arr).split("\0")[0];
try this: String s = new String(arr).trim()