我正在试着写一个最简单的java web服务器程序,遵循一个只能处理GET查询的指令。其主要思想是从套接字获取ObjectOutputStream,使用ObjectInputStream打开本地文件,并将其逐字节写入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();
}
}
}但是,当我使用浏览器访问localhost:8080 (端口是8080)时,它抛出了一个IOException
invalid stream header: 3C68746D我相信它是在out.writeByte((byte) data); step中。你能告诉我为什么和如何修复它吗?谢谢您的支持。
发布于 2012-08-09 12:13:05
在java中,ObjectInputStream和ObjectOutputStream用于对象序列化。请参考下面的文章来了解这些流的用法。
http://java.sun.com/developer/technicalArticles/Programming/serialization/
对于您的代码,无论在哪里找到相应的对象流,您都可以更好地使用BufferedInputStream和BufferedOutputStream。
https://stackoverflow.com/questions/11876581
复制相似问题