2013-04-30 69 views
0

我寫了一個基本的java服務器端聊天應用程序。 目前我使用DataInputStreamreadUTF(),它只是傳輸文本。Java,通過輸入/輸出流發送數據

任何人都知道發送圖像旁邊(或不旁邊)文字的最佳方式?

我是相當新的Java和它的軟件包,任何建議都很好:)

回答

2

對於寫入圖像,使用的ImageIO:

BufferedImage img = ImageIO.read(new File("c:\test\img.png")); 
ImageIO.write(img,"png", <out writer variable>); 

用於讀取圖像,使用的ImageIO:

BufferedImage img = ImageIO.read(ImageIO.createImageInputStream(<socket input stream variable>)); 

注:readUTF將無法​​正常工作,因爲它用於讀取UTF字節

+0

這是完美的謝謝! – JamesB123 2013-04-30 08:47:59

1

我只做過幾次而沒有正式設置。據說這很可能是而不是通過任何套接字流執行圖像傳輸的正確方法,所以如果任何人有任何洞察正確的方式做到這一點,請分享。

在所有發送來回的數據中,如果爲一個標題指定了128個字節,則此標題將包含有關您發送的數據內容的信息。

假設您有客戶端A,並且他們想要將圖像發送給他們的朋友客戶端B.客戶端a通過發送包含消息的數據包:「FILE 45000 myimage.bmp」(您應該找到更好的方式發送頭部比以FILE開頭,類似於發送圖像的數字2和發送消息的數字1)。發送文件大小,文件的名稱,以後可以獲得技術併發送校驗和。

然後客戶端A將開始流式傳輸所有標題爲相同標題信息的數據。然後,客戶端B將接收數據並在它進入時開始組裝它。如果一條消息不是以「FILE」開頭,那麼您可以確定如何處理該數據包(可能是文本消息或其他內容)。

什麼IM打算把這裏大多是僞代碼,因爲我真的不知道你的代碼是什麼樣子,但它可能是這個樣子:

DataInputStream in = new DataInputStream(/*your sockets inputstream*/); 
    FileOutputStream out = new FileOutputStream(new File("c:\\myfile")); 

    int numRead = 0; 
    byte[] bytes = new byte[1024]; 
    while((numRead = in.read(bytes)) != -1) { 
     String header = new String(bytes, 0, 128); 
     if(header.startsWith("TEXT")) { 
      // send text to your chat box 
      String content = new String(bytes, 128, bytes.length-128); 
     } else if(header.startsWith("FILE")) { 
      // write the remainder of the file to the harddrive 
      out.write(bytes, 128, bytes.length-128); 
     } 
    } 

這是所有的東西玩弄和犯錯誤並修復。對Java新手全是關於試驗和錯誤的,如果你有任何問題請發帖,或者如果有人有任何正確的標題發送或分隔符鏈接請鏈接!

+0

喜歡這個答案,搞砸了一下,不是工作太糟糕! – JamesB123 2013-04-30 08:48:55

+0

是的,我用這種方法從朋友的計算機發送一個10GB文件到不久以前。 Theres很多修補它,使事情運作良好。我很高興你發現它有用= D – 2013-04-30 15:13:15