我有一個2D動態數組包含整數和字符串,我需要發送到服務器。該陣列包含100,000列。一種可能性是將數組複製到文件中並將其發送到服務器,服務器可以解析它。而另一種可能性是做序列化。我正在做socket編程,我正在尋找的解決方案應該是最佳的。考慮到數組的大小,我不認爲將每個元素轉換爲字節會很好。請你能給我一些提示或指導我如何着手。如何通過套接字發送一個2D陣列到Java服務器
-1
A
回答
0
將數據序列化爲字節以通過套接字進行流式傳輸,或將數據序列化爲文件以及發送文件基本上是一回事。如果您序列化到一個文件,您可以使用FTP等已建立的協議,這對於一個剛接觸套接字的開發人員來說更容易。
然而,再次意識到它們本質上是同一個問題。將編程對象分解爲字節以寫入輸出流。
編輯:
根據您的字符串的內容,使用zip壓縮算法是一個不錯的選擇。字符串中的重複內容越多,您獲得的壓縮比就越高。以下僅是一個示例文件格式:
- 要輸入的整數數量。 (因爲你沒有在你的二維數組中給出最大的ROWS,所以我不能說這需要多少字節,我們假定它的8個字節。)
- 所有整數。這將需要3 * NUM_INTS個字節。
- 拉鍊壓縮的字符串,用空格分隔。
我在這裏做了很多假設,因爲您的問題還沒有足夠具體,或者您給出的任何答覆。
0
0
一個簡單的方法是使用一個DataOutputStream
並將它環繞您使用的插座:DataOutputStream dOut = new DataOutputStream(socket.getOuputStream())
。
然後,您可以只建立自己的簡單的二進制協議這樣的(它是一個一維數組,但它可以很容易地擴展爲二維數組工作以及):如果你想優化
//first write the amount of elements in the array
dOut.write(array.length());
//now write every element
for (Object obj : array) {
if (obj instanceof Integer) {
dOut.writeByte(0); //0 = Integer
dOut.writeInt((Integer) obj);
} else
if (obj instanceof String) {
dOut.writeByte(1); //1 = String
dOut.writeUTF((String) obj); //UTF-8 encoded String
}
// ...
}
對於數據大小,則還可以在套接字的OutputStream
和DataOutputStream
之間使用GZIPOutputStream
,如下所示:new DataOutputStream(new GZIPOutputStream(socket.getOutputStream()))
。當然,你必須在服務器端解壓它才能工作。
相關問題
- 1. IOexception發送一個對象到服務器(套接字連接)
- 2. 如何通過套接字發送int C++服務器/ Java客戶端
- 3. 通過套接字將Java文件對象發送到服務器
- 4. 無法通過TCP從java套接字發送數據到.net tcp服務器
- 5. Java服務器:套接字發送HTML代碼到瀏覽器
- 6. 如何通過套接字發送列表java
- 7. 套接字,從服務器發送事件到服務器
- 8. 通過套接字發送多個變量從客戶端到服務器
- 9. Java通過套接字發送文件
- 10. 通過Java套接字發送文件
- 11. Java - 通過套接字發送證書
- 12. 通過服務器發送BufferedImage到另一個Java客戶端
- 13. 從iOS版將數據發送到Java套接字服務器
- 14. Java套接字 - 從客戶端發送文件到服務器
- 15. 如何通過java套接字將多個圖像從客戶端發送到服務器?
- 16. tcp套接字服務器不發送
- 17. Java客戶端/服務器通過套接字發送對象問題
- 18. 發送通過套接字的Java TCP服務器對象Android應用
- 19. Arduino客戶端通過套接字向Java服務器發送數據
- 20. 如何通過python中的套接字將字符串發送到java服務器?
- 21. 從java服務器發送短信到android客戶端usig套接字通過點擊一個按鈕
- 22. 如何通過套接字發送和接收Java對象?
- 23. 通過套接字發送一個匿名類? (Object.Stream in Java)
- 24. 通過數據報套接字發送一個對象java
- 25. 使用Java發送一個數組通過套接字
- 26. 使用TCP通過套接字從服務器端發送ArrayList到客戶端
- 27. 如何通過套接字將數據從c#客戶端發送到java服務器?
- 28. Java服務器套接字
- 29. Java套接字編程,服務器不發送消息
- 30. 套接字,java發送文件服務器客戶端
「應該是最優的」以什麼方式優化?速度?安全?可靠性?你嘗試過什麼嗎?就目前而言,問題太廣泛了! – Burkhard
在速度方面 – Shahzaib
根據網絡的速度和質量,壓縮流可能會有用。再次請添加一些細節! – Burkhard