我被迫为此使用TCP套接字。

我需要查询一些ip,从中获取图像并将其放入文件中。

所以我的实际代码如下所示:

InetAddress ip = InetAddress.getByAddress(rawip);
Socket socket = new Socket(ip, 80);
PrintWriter pw = new PrintWriter(socket.getOutputStream());

pw.println("GET "+ url +" HTTP/1.1");
pw.println("Host: " + m_url.substring(4));
pw.println("Connection: Close");
pw.println("User-Agent: Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.72 Safari/537.36");
pw.println("");
pw.flush();


BufferedReader in = new BufferedReader(new InputStreamReader (socket.getInputStream()), 1);

String ln;
//Reading header
while((ln = in.readLine()) != null)
{
    //if header is finished
    if (ln.equals("")) break;
}

BufferedImage imgage = ImageIO.read(socket.getInputStream());

ByteArrayOutputStream baos = new ByteArrayOutputStream();
ImageIO.write( imgage, format, baos );
baos.flush();
byte[] imageInByte = baos.toByteArray();
baos.close();

我得到以下错误:
java.lang.IllegalArgumentException: image == null!

我以前是手动读取所有字节的。我正在获取图片,但是开始时缺少一些字节(大约7000个)。

如何使其工作?

最佳答案

因此,似乎出现了以下问题:

在InputReader上使用两个阅读器并不安全。第一次读取可能会消耗一些数据,即使您未显式调用它也是如此。它将保持其缓冲区已满。

因此,解决方案就是简单地为两者使用相同的就绪状态。

我通过使用字节读取器删除 header 来修复它。之后,我可以使用此字节读取器来获取我的图片。

09-30 14:10
查看更多