Java 如何下载带有套接字的映像
所以我在做一个练习,使用套接字从web获取图像。我不确定在存储图像字节然后创建文件时使用哪个类。到目前为止,我的代码是:Java 如何下载带有套接字的映像,java,image,sockets,Java,Image,Sockets,所以我在做一个练习,使用套接字从web获取图像。我不确定在存储图像字节然后创建文件时使用哪个类。到目前为止,我的代码是: import java.io.*; import java.net.*; import java.awt.image.*; import javax.imageio.stream.ImageInputStream; import javax.imageio.ImageIO; class MyClass{ pub
import java.io.*;
import java.net.*;
import java.awt.image.*;
import javax.imageio.stream.ImageInputStream;
import javax.imageio.ImageIO;
class MyClass{
public static void main(String[] args)throws IOException{
Socket s = new Socket();
ImageInputStream s_in = null; //I'm not sure about this
PrintWriter s_out = null;
try{
s.connect(new InetSocketAddress("data.pr4e.org",80));
System.out.println("Connected");
s_out = new PrintWriter(s.getOutputStream(), true);
s_in = ImageIO.createImageInputStream(s.getInputStream());//nor this
}
catch (UnknownHostException e){
System.err.println("Don't know about host");
System.exit(1);
}
//Message to server
String message = "GET http://data.pr4e.org/cover3.jpg HTTP/1.0\r\n\r\n";
s_out.println(message);
//This is where it gets confusing
OutputStream out = null;
while (true){
try{
out = new BufferedOutputStream(new
FileOutputStream("C:\\Users\\Steff\\Desktop\\Java ejemplos\\cover3.jpg"));
out.write(s_in.read());
}
finally{
if(out != null){
out.close();
}
}
}
}
}我把你的代码修改了一点。它将所有数据保存到文件中
public static void main(String[] args) throws IOException {
Socket s = new Socket();
InputStream s_in = null;
PrintWriter s_out = null;
try {
s.connect(new InetSocketAddress("data.pr4e.org", 80));
System.out.println("Connected");
s_out = new PrintWriter(s.getOutputStream(), true);
s_in = s.getInputStream();
} catch (UnknownHostException e) {
System.err.println("Don't know about host");
System.exit(1);
}
// Message to server
String message = "GET http://data.pr4e.org/cover3.jpg HTTP/1.0\r\n\r\n";
s_out.println(message);
OutputStream out = new BufferedOutputStream(new FileOutputStream("C:\\Users\\Steff\\Desktop\\Java ejemplos\\cover3.jpg"));
int count;
byte[] buffer = new byte[4096];
while ((count = s_in.read(buffer)) > 0) {
out.write(buffer, 0, count);
}
out.close();
}
不幸的是,图像不可读。为什么?因为保存的数据包含整个流以及HTTP响应。这就是使用套接字而不使用诸如ApacheHttpClient之类的HTTP感知库所得到的结果。您可以使用任何文本编辑器打开文件以查看内容
如果您确实确定要继续使用套接字,请尽可能咨询。它包含更多的代码来处理从实际数据中分离标题的问题