/** * 使用字节数组输出流中的字节数组作为正文内容 * java.io.ByteArrayOutputStream是一个低级流,其内部维护一个字节数组 * 通过这个流写出的数据全部存入该数组中 */ private ByteArrayOutputStream baos; private byte[] contentData;//保存动态数据的(数据从baos里获取的)
/** * 响应发送前的准备工作 */ private void sendBefore() { if (baos != null) {//不为null,说明处理请求的环节用过它写出过动态数据 //获取到baos内部的字节数组(获取所用之前通过这个流写出的字节) contentData = baos.toByteArray(); //根据该数组的长度设置响应头Content-Length addHeaders("Content-Length", contentData.length + ""); } }
/** * 发送响应正文 */ private void sendContent() throws IOException { OutputStream out = socket.getOutputStream(); if (contentData != null) {//有动态数据 out.write(contentData); } else if (contentFile != null) { byte[] data = new byte[1024 * 10];//10kb int len; try ( FileInputStream fis = new FileInputStream(contentFile); ) {