在從套接字讀取數據期間,我遇到了一些問題如果套接字流中存在一些空數據,因此DataInputStream不會讀取完整的數據,並且在接收端也有解析數據的異常。 什麼是從套接字讀取數據的正確方法,因此在任何時候都不會丟失數據? 在此先感謝。從套接字讀取數據的問題
0
A
回答
2
你應該張貼被用於從套接字讀取的代碼,但對我來說最有可能的情況是,識別代碼被錯誤地解釋爲0字節作爲流的類似下面的代碼
InputStream is = ...;
int val = is.read();
while (0 != (val = is.read()) {
// do something
}
結束
但流指標的最後居然是-1
InputStream is = ...;
int val = is.read();
while (-1 != (val = is.read()) {
// do something
}
編輯:在回答關於使用isavailable()
您的評論。我假設你的意思是available()
,因爲isavailable()
InputStream上沒有方法。如果您使用可用來檢測流的結束,那也是錯誤的。該函數僅告訴您可以不阻塞地讀取多少個字節(即,當前有多少個字節在緩衝區中),而不是流中剩下多少個字節。
0
我個人比DataInputStream更喜歡ObjectInputStream,因爲它可以處理所有類型,包括字符串,數組,甚至是對象。
是的,您可以只讀取整行1行receive.readObject()
,但不要忘記對返回的對象進行類型轉換。
read()
可能會更容易,因爲您在1行中讀取整個事件,但不準確。通過一個讀取的數據之一,是這樣的:
receive.readBoolean()
receive.readInt()
receive.readChar()
etc..
0
String finalString = new String("");
int finalSize = remainingData;//sizeOfDataN;
int reclen = 0;
int count_for_breaking_loop_for_reading_data = 0;
boolean for_parsing_data = true;
while(allDataReceived == false) {
ByteBuffer databuff = ByteBuffer.allocate(dis.available());
// System.out.println("bis.availbale is "+dis.available());
databuff.clear();
databuff.flip();
dis.read(databuff.array());
String receivedStringN = trimNull(databuff.array());
finalString = finalString + receivedStringN;
System.out.println("final string length "+finalString.length());
if(finalString.length() == finalSize) {
allDataReceived = true;
}
count_for_breaking_loop_for_reading_data++;
if(count_for_breaking_loop_for_reading_data > 1500) {
For_parsing_data = false;
Break;
}
}
相關問題
- 1. 從套接字關閉後從套接字讀取數據
- 2. PHP:連接:保持活着問題讀取套接字數據
- 3. CocoaAsyncSocket和從套接字讀取數據
- 4. 從套接字讀取原始數據
- 5. 從套接字讀取數據
- 6. 從套接字讀取傳入數據?
- 7. 讀取數據從UDP套接字
- 8. 異步套接字讀取問題
- 9. 套接字超時問題:Android客戶端從PC服務器讀取數據
- 10. 從套接字讀取數據問題,在Android應用程序中凍結UI
- 11. 讀取從PHP中的套接字接收的所有數據
- 12. 從C讀取套接字
- 13. 從套接字讀取
- 14. wxWidgets從套接字讀取
- 15. 從TCP套接字讀取
- 16. 從套接字塊讀取
- 17. 使用套接字從服務器線程中的套接字讀取數據
- 18. 如果新數據到達Android,從套接字讀取數據
- 19. 延遲讀取TCP套接字數據
- 20. Java套接字不讀取數據
- 21. 在運行時從套接字讀取問題
- 22. 從Java的套接字讀取字節
- 23. 如何從多次讀取接收套接字數據?
- 24. 從Flex(XMLSocket)連接到.NET(套接字)的數據問題
- 25. 通過循環從套接字讀取數據時獲取「java.io.EOFException」
- 26. 從網站讀取數據的問題
- 27. 從C中的套接字讀取數據
- 28. 從java中讀取未格式化數據的套接字
- 29. 從流套接字讀取數據包的C錯誤
- 30. java.sql.SQLRecoverableException:沒有更多的數據要從套接字讀取
我使用isavailable和我讀了整個數據 – Sam97305421562 2009-10-31 07:40:09
OK,所以職位的代碼,或者可以複製該問題的代碼的一個小例子。我說我猜測,沒有看到代碼就無法確定。 – Jherico 2009-10-31 16:35:21