鍍金池/ 問答/Java  Linux/ getOutputStream() has already been calle

getOutputStream() has already been called for this response如何解決?

寫文件下載接口中,發(fā)現(xiàn)不能再使用 resp.getWriter().write(""); 然后就報(bào)錯(cuò):

getOutputStream() has already been called for this response

  resp.setHeader("content-disposition", "attachment;filename="
                    + URLEncoder.encode(name, "UTF-8").replaceAll("%28", "(").replaceAll("%29", ")"));
            OutputStream out = resp.getOutputStream();
            byte buffer[] = new byte[1024];
            int len = 0;
            // 循環(huán)將輸入流中的內(nèi)容讀取到緩沖區(qū)當(dāng)中
            while ((len = in.read(buffer)) > 0) {
                // 輸出緩沖區(qū)的內(nèi)容到瀏覽器,實(shí)現(xiàn)文件下載
                out.write(buffer, 0, len);
            }
            // 關(guān)閉輸出流
            out.close();
            // 關(guān)閉文件輸入流
            in.close();
            //long s = new Date().getTime();
            //Thread.sleep(2000);
            // long s1 = new Date().getTime();
            // System.out.println(s1 - s);
            resp.getWriter().write("");

現(xiàn)在的目的是既能使用resp.getOutputStream();也能使用resp.getWriter().write("");
有木有大神能幫忙解決一下???

回答
編輯回答
疚幼
public ServletOutputStream getOutputStream()
        throws IOException {

        if (usingWriter) {
            throw new IllegalStateException
                (sm.getString("coyoteResponse.getOutputStream.ise"));
        }

        usingOutputStream = true;
        if (outputStream == null) {
            outputStream = new CoyoteOutputStream(outputBuffer);
        }
        return outputStream;

    }
    調(diào)用getOutputStream方法后會執(zhí)行usingOutputStream = true;
    再調(diào)用getWriter方法
    if (usingOutputStream) {
            throw new IllegalStateException
                (sm.getString("coyoteResponse.getWriter.ise"));
        }
        就會拋出這個(gè)異常,if <code>getOutputStream</code> has
     *  already been called for this response,所以不能同時(shí)使用。
2017年10月9日 17:59