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

Другие вопросы по тегам