1

我正在尝试按照只能处理 GET 查询的指令编写一个最简单的 Java Web 服务器程序。主要思想是从一个socket中获取一个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);步调一致的。你能告诉我为什么以及如何解决它吗?提前谢谢。

4

1 回答 1

1

ObjectInputStreamObjectOutputStream用于java中的对象序列化。请参阅以下文章以了解这些流的用法。

http://java.sun.com/developer/technicalArticles/Programming/serialization/

对于您的代码,您可以更好地使用BufferedInputStreamBufferedOutputStream在任何地方找到相应的对象流。

于 2012-08-09T04:13:05.383 回答