通过Java套接字读取图像文件

通过Java套接字读取图像文件,java,http,sockets,http-headers,Java,Http,Sockets,Http Headers,这就是我到目前为止所做的 Socket clientSocket = new Socket(HOST, PORT); ByteArrayOutputStream buffer = new ByteArrayOutputStream(); InputStream is = socket.getInputStream(); byte[] byteChunk = new byte[1024]; int c = is.read(byteChunk); while (c != -1){ b

这就是我到目前为止所做的

Socket clientSocket = new Socket(HOST, PORT);

ByteArrayOutputStream buffer = new ByteArrayOutputStream();

InputStream is = socket.getInputStream();
byte[] byteChunk = new byte[1024];

int c = is.read(byteChunk);

while (c != -1){
    buffer.write(byteChunk, 0, c);
    c = is.read(byteChunk);
}

BufferedImage bufferedImage = ImageIO.read(new ByteArrayInputStream(buffer.toByteArray()));
我的代码的问题是
ImageIO.read()
返回null

当我打印
ByteArrayOutputStream
对象的内容时,我得到的是标题部分

HTTP/1.1 200 OK
Date: Fri, 30 Dec 2011 11:34:19 GMT
Server: Apache/2.2.3 (Debian) ...........
Last-Modified: Tue, 20 Dec 2011 19:12:23 GMT
ETag: "502812-490e-4b48ad8d273c0"
Accept-Ranges: bytes
Content-Length: 18702
Connection: close
Content-Type: image/jpeg
后跟一个空行加上许多不同字符的行,如
Àã$sU,e6‡Í~áŸp;Öã…

同样,我的问题是
ImageIO.read()
函数返回null


提前感谢。

为什么不想使用简单的http URL从主机获取图像? 我的意思是:


如果您想使用普通套接字,您必须解析http响应并手动从http应答中提取数据:读取/跳过标题,读取二进制数据并将其传递给
ImageIO.read
(或者将流搜索到正确的位置,并将流传递给
ImageIO.read
)。

,因为您似乎是在从http进行查询,为什么不使用HTTP客户端实现而不是原始套接字呢?我需要使用套接字进行练习。打印图像字节,并在写入之前和读取之后进行比较。如果匹配,则变速器没有问题。然后我们看看其他方面,我假设您使用java.lang.String、java.io.OutputStream)将图像写入套接字。请注意,写入时需要指定图像格式。我仅限于使用普通套接字。你的意思是我需要去掉我在问题中提到的HTTP头部分吗?@nevayshirazi是的,当然你需要获取普通图像二进制数据来将其传递给ImageIO.read方法。好的,这很有意义。谢谢你的回答。-1表示没有答案和“代码太多”-1/跳过标题2/获取正文3/保存(如果你不确定流的来源/类型,你可以随时检查标题/内容类型)
URL imageURL = new URL("http://host:port/address");
BufferedImage bufferedImage = ImageIO.read(imageURL);