java - 通过Java Socket读取图像文件

标签 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){
    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 从主机获取图像? 我的意思是:

URL imageURL = new URL("http://host:port/address");
BufferedImage bufferedImage = ImageIO.read(imageURL);

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

关于java - 通过Java Socket读取图像文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8679112/

相关文章:

java - Java 中的 .Net SecureString

通过 http 上传时 Android 图片损坏

http - REST 响应——我应该将新资源的 URL 放在标题、正文或两者中吗?

php - 在 PHP 中创建一个网络服务器(没有 Apache)

c - 使用异步套接字让服务器处理多个客户端

java - org.slf4j :slf4j-jcl:jar is missing 的“依赖项.依赖项.版本”

java - 我如何使用 ObjectContentManager 在节点下添加节点?

Python socket 接收和存储数据

java - 如何在junit测试用例中使用 'MOCKITO_CORE when'传递void返回类型

java - linux服务器中的服务器套接字代码