小编典典
使用BufferedReader有误,原因有两个:
它将字节转换为String,然后再转换回字节以将其发送到输出流。转换可能(可能会)导致数据丢失;
它解析了太多字节,您无法控制它。
您需要通过手术来解决此问题,创建一个所需大小的字节缓冲区,并使用an
InputStream根据自己的条件逐字节读取流。另外,由于您知道HTTP标头的结尾为“ \ r \ n \ r \ n”(或13 10 13
10字节),因此可以扫描自己的缓冲区以查找此模式并采取相应的措施。
最好的选择是将图像下载到文件中,然后使用ImageIO从本地文件中读取图像。
这是允许您通过剪切标题下载图像文件(或任何其他文件)的代码:
// Initialize the streams.
final FileOutputStream fileOutputStream = new FileOutputStream(file);
final InputStream inputStream = socket.getInputStream();
// Header end flag.
boolean headerEnded = false;
byte[] bytes = new byte[2048];
int length;
while ((length = inputStream.read(bytes)) != -1) {
// If the end of the header had already been reached, write the bytes to the file as normal.