我寫了一個基本的java服務器端聊天應用程序。 目前我使用DataInputStream
和readUTF()
,它只是傳輸文本。Java,通過輸入/輸出流發送數據
任何人都知道發送圖像旁邊(或不旁邊)文字的最佳方式?
我是相當新的Java和它的軟件包,任何建議都很好:)
我寫了一個基本的java服務器端聊天應用程序。 目前我使用DataInputStream
和readUTF()
,它只是傳輸文本。Java,通過輸入/輸出流發送數據
任何人都知道發送圖像旁邊(或不旁邊)文字的最佳方式?
我是相當新的Java和它的軟件包,任何建議都很好:)
對於寫入圖像,使用的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字節
我只做過幾次而沒有正式設置。據說這很可能是而不是通過任何套接字流執行圖像傳輸的正確方法,所以如果任何人有任何洞察正確的方式做到這一點,請分享。
在所有發送來回的數據中,如果爲一個標題指定了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新手全是關於試驗和錯誤的,如果你有任何問題請發帖,或者如果有人有任何正確的標題發送或分隔符鏈接請鏈接!
喜歡這個答案,搞砸了一下,不是工作太糟糕! – JamesB123 2013-04-30 08:48:55
是的,我用這種方法從朋友的計算機發送一個10GB文件到不久以前。 Theres很多修補它,使事情運作良好。我很高興你發現它有用= D – 2013-04-30 15:13:15
這是完美的謝謝! – JamesB123 2013-04-30 08:47:59