我想写一个最简单的java web服务器程序,遵循一条只能处理GET请求的指令。主要思想是从套接字获取ObjectOutputStream,使用ObjectInputStream打开本地文件并逐字节地将其写入ObjectOutputStream。ObjectOutputStream在java web服务器中抛出ObjectOutputStream
serve()
附在下面。它需要我要写入的ObjectOutputStream和作为参数的文件路径。
public void serve(ObjectOutputStream out, String path) throws IOException {
System.out.println("Trying to serve: " + path);
File file = new File(path);
if (!file.exists()) {
//return an HTTP 404
} else {
out.writeBytes("HTTP/1.1 200 OK\n\n");
ObjectInputStream in = null;
try {
in = new ObjectInputStream(new FileInputStream(file));
int data;
while ((data = in.readByte()) != -1) {
out.writeByte((byte) data);
}
System.out.println("Request valid.");
} catch (IOException e) {
System.out.println("Error in serve(): sending file: " + e.getMessage());
} finally {
if (null != in)
in.close();
}
}
}
然而,当我使用浏览器访问本地主机:8080(端口为8080),它抛出IOException
invalid stream header: 3C68746D
我相信这是out.writeByte((byte) data);
一步。你能告诉我为什么以及如何解决它?谢谢你。
这对我没有意义,为什么你使用ObjectInputStream和ObjectOutputStream? – Tom 2012-08-09 04:01:18
@Tom因为我想以二进制的方式打开文件,以防我想获取图片而不是html文件 – YankeeWhiskey 2012-08-09 04:03:12