2015-02-19 3 views
0

Я пытаюсь скрыть байты в строку, что я получаю после чтения с устройства bluetooth. Ниже приведен код, который я использую, но он не дает правильной строки. Выход такой какКак преобразовать массив байтов в строку?

02-19 18: 01: 49.300: I/BluetoothReadService (17693): Сообщение прочитано: 8 1.04TTO

byte[] buffer = new byte[1024]; 
      int bytes; 
      // Keep listening to the InputStream while connected 
      while (true) 
      { 
       try 
       { 
        // Read from the InputStream      
        bytes = mmInStream.read(buffer, 0, buffer.length); 

        String readMessage = null; 
        byte[] getBytes = null; 
        try { 
         readMessage = BitConverter.toString(buffer); 
         getBytes = BitConverter.getBytes(readMessage); 
        } catch (Exception e) { 
         // TODO Auto-generated catch block 
         e.printStackTrace(); 
        } 

        String s = new String(getBytes, "US-ASCII"); 
        Log.i(TAG, "Message Read : "+readMessage +"ByteString"+s); 
        mHandler.obtainMessage(MainActivity.MESSAGE_READ).sendToTarget(); 
       } catch (IOException e) 
       { 
        Log.e(TAG, "disconnected", e); 
        connectionLost(); 
        break; 
       } 

Просьба предложить, что делать?

+0

http://stackoverflow.com/questions/6684665/java-byte-array-to-string-to-byte-array Google - ваш друг. – Gal

+1

Вы уверены, что байты содержат текст в кодировке US-ASCII? –

+0

использовать эту строку 'String str = new String (bytes, Charsets.US_ASCII);' –

ответ

0

Строка readMessage должна быть инициализирована другим способом. Если вы используете readMessage = new String(buffer);, он должен работать.

+0

Нет, я пробовал все это, но получаю тот же результат. – Vid

+0

Не могли бы вы попробовать 'String readMessage = Arrays.toString (buffer);'? Он представляет числовые значения байтов. Это может быть просто из-за того, что они вне диапазона обычного символа String. Может быть, вы можете сравнить их так? – Gerralt

0

По apache StringUtils вы можете использовать этот метод from document

public static String newStringUsAscii(final byte[] bytes) { 
    return new String(bytes, Charsets.US_ASCII);  
    } 

И если до сих пор проблема не решена, чем использование ниже метод для чтения строки

public String readData() { 

    String response = null; 
    int bytesReceived=-1; 
    byte[] readBuffer = new byte[1024]; 
    try{ 

     try{ 
      bytesReceived = inputStream.read(readBuffer); 
      Logger.debugLog(MODULE ,"# Byte Receieved #" + bytesReceived); 
     }catch(Exception e){ 
      Logger.errorLog(MODULE ,"Error in readData() , Reason:"+e.getMessage(),e); 

     } 
     if(bytesReceived > 0){   
      response = new String(readBuffer,0,bytesReceived); 

      Logger.debugLog(MODULE + "Total Bytes Received: " + bytesReceived); 
      Logger.debugLog(MODULE, "Total Time Taken : " + timetoread); 
      Logger.debugLog(MODULE, "Length of data received : " + response.length()); 
      Logger.infoLog(MODULE, "Data Received : ####" + response + "####"); 
     }else{ 
      ////////// HERE MEANS TCP CONNECTION STATUS WILL CLOSE_WAIT 
      ////////// SO RELEASING CONNECTION. 
      Logger.infoLog(MODULE, " Releasing Resource. bytesReceived is <= 0 : Total Bytes Received :"+ bytesReceived); 

       releaseResources(); 

      } 
      Logger.infoLog(MODULE, " Resource has been released."); 
     } 
    }catch(Exception e){ 
     Logger.errorLog(MODULE, "In catch : Data Received : ####" + response + "####"); 
     Logger.errorLog(MODULE, "Exception in readdata() : " + e); 
    }finally{ 
     readBuffer=null; 
    } 
    return response; 
} 
0

Я думаю, что вместо

String s = new String(getBytes, "US-ASCII"); 

вы должны использовать

String s = new String(buffer, "US-ASCII"); 

и удалите эту деталь с помощью BitConverter.

0

Вы, кажется, игнорируете количество фактически прочитанных байтов и создаете новую строку из всего буфера 1024 байта.

Попробуйте вместо этого:

String readMessage = new String(buffer, 0, bytes, "US-ASCII"); 
0

Чтение Android официальный Bluetooth Chat example, в BluetoothChatFrangment.java, вы увидите следующее:

// construct a string from the valid bytes in the buffer 
String readMessage = new String(readBuf, 0, msg.arg1); 

в этом примере msg.arg1 равно bytes в вашем случае. Также readBuf - byte[].

Смежные вопросы