[英]Sending image (or binary data) over sockets in Java
我正在編寫一個HTTP服務器,以便從頭開始學習(嘗試更深入地學習HTTP),並且已經使該服務器向客戶端發送帶有HTML的HTTP響應,而沒有很多問題。
當我嘗試通過電線發送二進制數據(例如JPEG圖像)時,就會出現問題。 瀏覽器似乎無法正確解釋它。 為此,我已將響應的MIME類型設置為image/jpeg
,並且正確的Content-Length
仍然無法正確傳輸數據。
對此有些困惑,想知道我對Java中如何讀取二進制數據的理解或方法是否不正確?
我正在執行的一般方法是將磁盤中的文件讀取到FileInputStream
,然后將數據讀取到1024字節緩沖區中。 當我讀取緩沖區時,我正在將緩沖的數據寫入DataOutputStream
,該輸出具有客戶端的套接字連接作為OutputStream
。 使用后,我將刷新並關閉數據。
我為HTTP響應生成主體的部分在這里:
FileInputStream fis = new FileInputStream("www/server.jpg");
byte[] buffer = new byte[1024];
DataOutputStream dos = new DataOutputStream(this.clientSocket.getOutputStream());
int read;
while((read=fis.read(buffer)) >= 0) {
dos.write(buffer, 0, read);
}
dos.flush();
fis.close();
dos.close();
我已經硬編碼了幾件事,但是我認為這通常可以解決我的問題。 因此,當我發出如下所示的HTTP請求時,收到以下響應:
有人有想法么?
謝謝!
因此,@ rkosegi關於從curl
下載文件的評論幫助我弄清了問題所在。 顯然我在構造響應主體時不正確。 發生的是在HTTP實體標頭之后的正文內容之前插入了新行。 在流送正文內容之前刪除了此多余的換行符之后,我能夠使瀏覽器正確解釋數據。
天哪!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.