Java sun.net.httpserver太多字节无法写入流

Java sun.net.httpserver太多字节无法写入流,java,http,Java,Http,我使用com.sun.net.httpserver.httpserver public void handle(HttpExchange t) throws IOException { OutputStream os = t.getResponseBody(); os.write(generateResponse(t).getBytes()); os.close(); } 如果我尝试写入输出流,并且我的响应大于1024,则会出现以下异常: java.io.IOExcep

我使用
com.sun.net.httpserver.httpserver

public void handle(HttpExchange t) throws IOException {
    OutputStream os = t.getResponseBody();
    os.write(generateResponse(t).getBytes());
    os.close();
}
如果我尝试写入输出流,并且我的响应大于1024,则会出现以下异常:

java.io.IOException: insufficient bytes written to stream
        at sun.net.httpserver.FixedLengthOutputStream.close(FixedLengthOutputStream.java:89)
        at sun.net.httpserver.PlaceholderOutputStream.close(ExchangeImpl.java:454)
        at MyHttpServer$MyHandler.handle(MyHttpServer.java:49)
        at com.sun.net.httpserver.Filter$Chain.doFilter(Filter.java:77)
        at sun.net.httpserver.AuthFilter.doFilter(AuthFilter.java:83)
        at com.sun.net.httpserver.Filter$Chain.doFilter(Filter.java:80)
        at sun.net.httpserver.ServerImpl$Exchange$LinkHandler.handle(ServerImpl.java:675)
        at com.sun.net.httpserver.Filter$Chain.doFilter(Filter.java:77)
        at sun.net.httpserver.ServerImpl$Exchange.run(ServerImpl.java:647)
        at sun.net.httpserver.ServerImpl$DefaultExecutor.execute(ServerImpl.java:158)
        at sun.net.httpserver.ServerImpl$Dispatcher.handle(ServerImpl.java:431)
        at sun.net.httpserver.ServerImpl$Dispatcher.run(ServerImpl.java:396)
        at java.lang.Thread.run(Thread.java:745)

我就是这样解决的:

httpExchange.sendResponseHeaders(200, 0);
try (BufferedOutputStream out = new BufferedOutputStream(httpExchange.getResponseBody())) {
    try (ByteArrayInputStream bis = new ByteArrayInputStream(data)) {
        byte [] buffer = new byte [BUFFER_SIZE];
        int count ;
        while ((count = bis.read(buffer)) != -1) {
            out.write(buffer, 0, count);
        }
        out.close();
    }
}
这对我有用

try {
    byte[] bs = responseString.getBytes("UTF-8");
    httpExchange.sendResponseHeaders(200, bs.length);
    OutputStream os = httpExchange.getResponseBody();
    os.write(bs);
} catch (IOException ex) {
    Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
}

你能分享generateResponse(t)的代码吗?您应始终尝试创建可验证的示例。这些示例可能会有所帮助: