2012-07-09 78 views
0

我一直在閱讀Java Tutorials on I/O以試圖瞭解流和它們的正確用法。假設我有兩個連接的設備,並且兩個設備上都有一個InputStreamOutputStream。我如何在兩者之間傳輸數據?使用流在Java中傳輸數據

例如,如果我想讓一臺設備向另一臺設備發送一串文字,然後將這些文字打印到屏幕上。這將如何工作?

public class Device1 { 
    // assuming connectedDevice is something 
    String[] words = new String()[]{"foo", "bar", "baz"}; 
    OutputStream os = connectedDevice.getOutputStream(); 
    InputStream is = connectedDevice.getInputStream(); 
    /* 
     How to write to output stream? 
    */ 
} 

public class Device2 { 
    // assuming connectedDevice is something 
    ArrayList<String> words = new ArrayList<String>(); 
    OutputStream os = connectedDevice.getOutputStream(); 
    InputStream is = connectedDevice.getInputStream(); 
    /* 
     How can I somehow get the words using `read()` and `put()` 
     them into the ArrayList for use? 
    */ 
} 

也許我正在做所有這些錯誤。提前感謝您的理解幫助。

+0

您的2個設備是否在同一個JVM會話中運行? – assylias 2012-07-09 16:43:59

+0

單詞如何分隔?按空格?做多個空間問題? – 2012-07-09 16:44:43

+0

@assylias我想象兩個完全獨立的設備(例如Android設備和桌面)。 – Whymarrh 2012-07-09 16:47:00

回答

1

如果您只是想發送字符,請使用書寫端的OutputStreamWriter和讀取端的InputStreamReader來包裝您的流。您可以編寫整個字符串,然後一次讀取一個字符並打印出來。如果你需要非常小心,你應該選擇一個固定的字符編碼。

如果您想發送整個簡單對象,如String s,則可以使用DataOutputStream/DataInputStream。 (對於字符串,使用UTF方法。)

如果你想變得更加複雜,你需要做的使用ObjectOutputStreamObjectInputStream對象的序列化/反序列化。

2

這取決於設備如何連接。例如,他們可能通過TCP或通過共享文件系統進行連接。

如果您想專注於流,請創建一個使用文件系統的應用程序。然後,使用FileOutputStreamFileInputStream來理解流API。

如果您的重點是網絡,您還需要研究networking tutorial