2015-08-15 28 views
0

我要讓藍牙socket通信發送文件的Android的FileInputStream讀取相同的數據,連續

我通過緩衝來自的FileInputStream讀取數據,並把它寫在其他輸出流。

但是這個程序連續讀取相同的數據,沒有讀下一個內容。

這裏是我的源

 MSendArgWrapper wrapper = makeWrapper(sendArg, MSendArgWrapper.MODE_SWITCH_FILE); 
     try { 
      byte[] bytes = CUtility.serialize(wrapper); 
      outStream.write(bytes); 
      outStream.flush(); 
      File file = new File(filePath); 
      FileInputStream fis = new FileInputStream(file); 
      byte buf[] = new byte[1024]; 
      do { 
       int numread = fis.read(buf); 
       if (numread <= 0) 
        break; 
       if(LOG_I_ENABLE) 
        Log.i(TAG, "[CCommunicateThread] Sending File... [" + numread + "] => " + buf.toString()); 
       outStream.write(buf, 0, numread); 
      } while (true); 
      outStream.flush(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
      onDisconnected(); 
     } 

這是日誌

08-16 08:07:21.002 20001-21388/com.example.park.psyche I/CBluetoothManager﹕ [CCommunicateThread] Sending File... [1024] => [[email protected] 
08-16 08:07:21.002 20001-21388/com.example.park.psyche I/CBluetoothManager﹕ [CCommunicateThread] Sending File... [1024] => [[email protected] 
08-16 08:07:21.002 20001-21388/com.example.park.psyche I/CBluetoothManager﹕ [CCommunicateThread] Sending File... [1024] => [[email protected] 
08-16 08:07:21.002 20001-21388/com.example.park.psyche I/CBluetoothManager﹕ [CCommunicateThread] Sending File... [1024] => [[email protected] 
08-16 08:07:21.002 20001-21388/com.example.park.psyche I/CBluetoothManager﹕ [CCommunicateThread] Sending File... [1024] => [[email protected] 
08-16 08:07:21.002 20001-21388/com.example.park.psyche I/CBluetoothManager﹕ [CCommunicateThread] Sending File... [1024] => [[email protected] 
08-16 08:07:21.002 20001-21388/com.example.park.psyche I/CBluetoothManager﹕ [CCommunicateThread] Sending File... [1024] => [[email protected]

問題是什麼?

回答

0

您的代碼正在運行,但您打印的內容不是您認爲的內容。

字節數組類型byte[]是一個對象類型。如果您使用方法toString()它不會將字節轉換爲字符串。

如果你想一個byte[]轉換爲String類型的使用:new String(my_byte_array)

有:

Log.i(TAG, "[CCommunicateThread] Sending File... [" + numread + "] => " + new String(buf)); 

你會得到正確的輸出

+0

哦......我真是太笨。但我還有另一個問題。如果我發送7mb文件,則需要7秒。我怎樣才能加快藍牙文件傳輸? – JoonSoo

+0

我懷疑它來自你的文件讀取實現。藍牙很慢,經常遇到這個問題。如果你想檢查它不是來自你的閱讀實現,把你的文件放在一個變量中,並進行一些速度測試。另外我不知道藍牙套接字,但如果你有7MB的數據,你可以優化你的緩衝區大小,甚至你的沖洗頻率,在這篇文章中解釋http://stackoverflow.com/questions/25689871/java-file-download-hangs 。這可能是有道理的,因爲Smarphone有更多的內存/性能限制比服務器 –

+0

感謝您的幫助,但沒有辦法加快藍牙文件傳輸,我認爲... – JoonSoo