2012-08-09 65 views
1

我想写一个最简单的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);一步。你能告诉我为什么以及如何解决它?谢谢你。

+0

这对我没有意义,为什么你使用ObjectInputStream和ObjectOutputStream? – Tom 2012-08-09 04:01:18

+0

@Tom因为我想以二进制的方式打开文件,以防我想获取图片而不是html文件 – YankeeWhiskey 2012-08-09 04:03:12

回答