2013-07-17 46 views
0

我NSLogging我從外部來源收到的NSData流,但由於某種原因,它不斷打破自己40個字符塊,一旦它擊中40個字符時去一個新的行。我試圖通過流解析,並在特定的地方挑選出值,所以它一直在跳下一條線,這是一個巨大的麻煩。有誰知道如何防止這種行爲?這裏是我的NSLog的例子:NSData拆分塊

2013-07-17 14:44:32.638 Test App 
[4041:907] data equals <3e2c042c 31333037 31373032 34302d30 372c0100> 
2013-07-17 14:44:32.698 Test App 
[4041:907] data equals <00000000 2c020000 0000002c 03000000 00002cff> 
2013-07-17 14:44:32.758 Test App 
[4041:907] data equals <00000000 00> 

編輯:對於相關的代碼,我使用的是第三方BLE庫,所以我想它不會有太大用處。這基本上是相關的代碼只有一行:

NSData *data = [BLEdevice readReceivedBytes]; 
NSLog(@"data equals %@", data); 

我給了羅布的建議了一槍,這是結果:

2013-07-17 15:21:35.399 Test App[4060:907] data equals <3e2c012c 31333037 31373033 32312d30 372cff00> 
2013-07-17 15:21:35.401 Test App[4060:907] data length equals =20 
2013-07-17 15:21:35.458 Test App[4060:907] data equals <00000000> 
2013-07-17 15:21:35.460 Test App[4060:907] data length equals =4 

應該流回所有在只有一條線路,而不是最多40個字符。也許這是一個BLE的事情。

+3

如果你顯示了一些相關的代碼,這將有所幫助。 – rmaddy

+0

NSData是什麼?你如何得到你的流?你有緩衝限制嗎?你的回調是什麼時候被調用的? – Larme

+0

@Larme它是第三方BLE設備。我實際上確實放了一個緩衝區限制,它的輸入和輸出各有512個。 – John

回答

2

如果BLE只發送小數據包,那麼您可能無法做到這一點。而你 可能不應該期望返回一定大小的數據包。

你應該收集所有接收到的數據塊在NSMutableData對象,而不是:

// Init once: 
NSMutableData *collectedData = [NSMutableData data]; 

// Append received data in your read loop: 
NSData *data = [BLEdevice readReceivedBytes]; 
[collectedData appendData:data]; 

現在你可以在collectedData搜索特定字節。

+0

真棒謝謝!作爲一個方面說明,你知道是否有appendData之外的任何調用會阻止收集的數據在每次有新流進入時覆蓋本身? – John