Inputstream доставляет неожиданное сообщение
Я пытаюсь написать приложение для Android для отправки и получения последовательных сообщений. Все работает без ошибок, но мой InputStream доставляет только странные сообщения. Они всегда выглядят так: "B@410d2530" или "B@410a5f58". Так что, кажется, что-то гекса считает, что я даже не отправляю что-то на мое устройство Android, я не знаю, что это могут быть за сообщения. Даже если я отправляю последовательные сообщения на мое устройство через hterm, они просто игнорируются, и они просто показывают сообщения "B@xxxxxxx"
InputStream in = new InputStream() {
@Override
public int read() throws IOException {
return 0;
// TODO Auto-generated method stub
}
};
int BUFFER_SIZE = 32;
ByteArrayOutputStream bao = new ByteArrayOutputStream();
int byteshelp = 0;
String bla;
BufferedInputStream bis = new BufferedInputStream(in, BUFFER_SIZE);
private void readData() {
byte[] bufferhelp = new byte[BUFFER_SIZE];
try {
byteshelp = bis.read(bufferhelp, 0, BUFFER_SIZE);
bao.write(bufferhelp, 0, byteshelp);
byte temp[] = bao.toByteArray();
Log.v("BLA", "Thats in Temp: " + temp);
bao.reset();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
Я использую Android NDK, и мой InputStream подключен к FileInputStream для обработки данных с помощью SerialPort. Метод read является многопоточным, поэтому он доставляет данные без остановок.
Итак, мой главный вопрос: кто-нибудь знает, что могут означать эти сообщения "B @ 410d2530"?
Я был бы очень рад получить ответ и ответ на мой вопрос, так как я все еще новичок в сообществе stackru.
С уважением, Себ
2 ответа
Log.v("BLA", "Thats in Temp: " + temp);
Когда вы регистрируете объект байтового массива, по умолчанию Object
учебный класс toString()
метод будет вызван, чтобы преобразовать его в строку.
toString()
Метод возвращает String, т.е. ObjectClassName@HashCode.
Здесь, в B @ 410d2530, B - байт, символ @ и 410d2530 - имеет код этого конкретного экземпляра.
Решение:
Если вы хотите конвертировать ваши byte[]
в String
Для этого вы можете использовать конструктор String(byte[] bytes). т.е.
String s = new String(temp);
Log.v("BLA", "Thats in Temp: " + s);
Log.v("BLA", "Thats in Temp: " + temp);
temp
это массив, и вы звоните toString()
метод в Object
учебный класс.
public String toString() {
return getClass().getName() + "@" + Integer.toHexString(hashCode());
}
Вы можете увидеть официальный документ. http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html