tôi nhận được từ ổ cắm một chuỗi trong một mảng byte mà trông giống như:Làm thế nào để phát hiện kết thúc chuỗi trong mảng byte để chuyển đổi chuỗi?
[128,5,6,3,45,0,0,0,0,0]
Kích thước được đưa ra bởi giao thức mạng là tổng chiều dài của chuỗi (bao gồm số không) như vậy, trong dụ tôi 10
Nếu tôi chỉ cần làm:
String myString = new String(myBuffer);
tôi có vào cuối của chuỗi 5 không đúng caracter. Việc chuyển đổi dường như không phát hiện sự kết thúc của chuỗi caracter (0).
Để có được kích thước chính xác và chuỗi đúng tôi làm điều này:
int sizeLabelTmp = 0;
//Iterate over the 10 bit to get the real size of the string
for(int j = 0; j<(sizeLabel); j++) {
byte charac = datasRec[j];
if(charac == 0)
break;
sizeLabelTmp ++;
}
// Create a temp byte array to make a correct conversion
byte[] label = new byte[sizeLabelTmp];
for(int j = 0; j<(sizeLabelTmp); j++) {
label[j] = datasRec[j];
}
String myString = new String(label);
Có cách nào tốt hơn để xử lý các vấn đề?
Cảm ơn
+1 để tính mã hóa. Nếu các công cụ nhận được trên socket chỉ là một chuỗi Java được tuần tự hóa thì nó sẽ ổn. –
@G_H: "Chỉ cần chuỗi Java được tuần tự hóa" không thực sự xác định định dạng tuần tự hóa là gì. Nếu OP sử dụng tuần tự nhị phân Java, anh ta sẽ không thực hiện thao tác này một cách rõ ràng ... và nếu đó là một số định dạng tuần tự hóa khác, chúng ta cần biết * cái nào *. –
Tôi có lẽ nên ngừng nói chuyện ... Sự thật là tôi luôn tránh xa sự tuần tự hóa và không biết chi tiết về điều đó. JAXB hoặc JPA thường là điều duy nhất tôi thậm chí còn xem xét một tùy chọn. –