我正在编写一个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请求时,我收到以下响应:
有人有什么想法吗?
谢谢!
答案 0 :(得分:0)
所以,@ rkosegi关于从20161023T150422
下载文件的评论帮助我找出了问题所在。显然我正在错误地构建我的响应体。发生的事情是在我的HTTP实体标题之后在body内容之前插入了一个新行。在流式传输正文内容之前删除了这个额外的换行符之后,我能够让浏览器正确地解释数据。
D'哦!