1

GET 照会のみを処理できる命令に従って、最も単純な Java Web サーバー プログラムを作成しようとしています。主なアイデアは、ソケットから 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

ObjectInputStreamObjectOutputStreamJava でのオブジェクトのシリアル化に使用されます。これらのストリームの使用方法については、以下の記事を参照してください。

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

コードでは、対応するオブジェクト ストリームが見つかった場合はどこでもBufferedInputStreamandを使用することをお勧めします。BufferedOutputStream

于 2012-08-09T04:13:05.383 に答える