2010-01-02 32 views
3

我正在寫一個客戶端/服務器應用程序在Java中,我正在使用TCP來傳輸我存儲在ArrayList中的數據(即字符串數組的ArrayList)。在Java中通過TCP發送ArrayList <String[]>的最佳方法?

將數據從一個傳輸到另一個的最佳方法是什麼?我應該製作一個長字符串並使用PrintWriter的println()還是有更好的方法?

非常感謝!

回答

3

要有點添加到skaffman的答案:

OutputStream socketStream = ... 
GZIPOutputStream objectOutput = new GZIPOutputStream(new ObjectOutputStream(socketStream)); 
objectOutput.writeObject(myDataList); 

和客戶端上:

InputStream socketStream = ... 
ObjectInputStream objectInput = new ObjectInputStream(new GZIPInputStream(socketStream)); 
ArrayList<type> a = objectInput.readObject(); 
+0

謝謝,幫助! – 2010-01-02 22:54:54

+1

但是,我會避免GZIP的東西,除非你在一個低帶寬的網絡,並且你有CPU週期來刻錄。 – skaffman 2010-01-02 22:56:01

0

很多人會爲此使用Web服務框架,如Apache CXF。您也可以將其降級到JAXB或XML Beans。

+0

啊有趣,我會看看:) – 2010-01-02 22:51:19

11

假設客戶端和服務器,並用Java編寫的,並假設你堅持原始套接字,而不是一個更高級別的遠程框架:

OutputStream socketStream = ... 
ObjectOutput objectOutput = new ObjectOutputStream(socketStream); 
objectOutput.writeObject(myDataList); 

同樣,使用ObjectInputStream在接收端。

只要列表中的所有內容都實現java.io.Serializable,就應該很好地工作。

+0

+1肯定是* *第一選擇對於Java客戶端/服務器解決方案 – 2010-01-02 22:46:38

+0

那麼RMI將是我的首選.... – skaffman 2010-01-02 22:47:15

+0

謝謝,我會着眼於此,非常感謝! – 2010-01-02 22:48:39

1

您可能想要考慮JSON框架。見json.orgJSON = Javascript Object Notation。即使名稱暗示使用Javascript,json.jar也是一個很好的序列化/反序列化工具。

+0

啊我以前用Javascript使用JSON,可能是一個不錯的選擇謝謝! – 2010-01-02 22:51:51

0

你可能想看看Serialization。不過,您可以爲這種簡單的情況制定自己的格式。我個人喜歡bencoding。儘管最小的努力(也是最不容易出錯的)解決方案是序列化。

+0

謝謝我會研究他們兩個! – 2010-01-02 22:50:14

相關問題