📄 outputbuffer.java
字号:
} // ------------------------------------------------- Bytes Handling Methods /** * Sends the buffer data to the client output, checking the * state of Response and calling the right interceptors. * * @param buf Byte buffer to be written to the response * @param off Offset * @param cnt Length * * @throws IOException An underlying IOException occurred */ public void realWriteBytes(byte buf[], int off, int cnt) throws IOException { if (debug > 2) log("realWrite(b, " + off + ", " + cnt + ") " + coyoteResponse); if (closed) return; if (coyoteResponse == null) return; // If we really have something to write if (cnt > 0) { // real write to the adapter outputChunk.setBytes(buf, off, cnt); coyoteResponse.doWrite(outputChunk); } } public void write(byte b[], int off, int len) throws IOException { if (suspended) return; if (state == CHAR_STATE) cb.flushBuffer(); state = BYTE_STATE; writeBytes(b, off, len); } private void writeBytes(byte b[], int off, int len) throws IOException { if (closed) return; if (debug > 0) log("write(b,off,len)"); bb.append(b, off, len); bytesWritten += len; // if called from within flush(), then immediately flush // remaining bytes if (doFlush) { bb.flushBuffer(); } } // XXX Char or byte ? public void writeByte(int b) throws IOException { if (suspended) return; if (state == CHAR_STATE) cb.flushBuffer(); state = BYTE_STATE; if (debug > 0) log("write(b)"); bb.append( (byte)b ); bytesWritten++; } // ------------------------------------------------- Chars Handling Methods public void write(int c) throws IOException { if (suspended) return; state = CHAR_STATE; if (debug > 0) log("writeChar(b)"); cb.append((char) c); charsWritten++; } public void write(char c[]) throws IOException { if (suspended) return; write(c, 0, c.length); } public void write(char c[], int off, int len) throws IOException { if (suspended) return; state = CHAR_STATE; if (debug > 0) log("write(c,off,len)" + cb.getLength() + " " + cb.getLimit()); cb.append(c, off, len); charsWritten += len; } public void write(StringBuffer sb) throws IOException { if (suspended) return; state = CHAR_STATE; if (debug > 1) log("write(s,off,len)"); int len = sb.length(); charsWritten += len; cb.append(sb); } /** * Append a string to the buffer */ public void write(String s, int off, int len) throws IOException { if (suspended) return; state=CHAR_STATE; if (debug > 1) log("write(s,off,len)"); charsWritten += len; if (s==null) s="null"; cb.append( s, off, len ); } public void write(String s) throws IOException { if (suspended) return; state = CHAR_STATE; if (s==null) s="null"; write(s, 0, s.length()); } public void flushChars() throws IOException { if (debug > 0) log("flushChars() " + cb.getLength()); cb.flushBuffer(); state = BYTE_STATE; } public boolean flushCharsNeeded() { return state == CHAR_STATE; } public void setEncoding(String s) { enc = s; } public void realWriteChars(char c[], int off, int len) throws IOException { if (debug > 0) log("realWrite(c,o,l) " + cb.getOffset() + " " + len); if (!gotEnc) setConverter(); if (debug > 0) log("encoder: " + conv + " " + gotEnc); conv.convert(c, off, len); conv.flushBuffer(); // ??? } public void checkConverter() throws IOException { if (!gotEnc) setConverter(); } protected void setConverter() throws IOException { if (coyoteResponse != null) enc = coyoteResponse.getCharacterEncoding(); if (debug > 0) log("Got encoding: " + enc); gotEnc = true; if (enc == null) enc = DEFAULT_ENCODING; conv = (C2BConverter) encoders.get(enc); if (conv == null) { conv = new C2BConverter(bb, enc); encoders.put(enc, conv); /* try { conv = new C2BConverter(bb, enc); encoders.put(enc, conv); } catch (IOException e) { conv = (C2BConverter) encoders.get(DEFAULT_ENCODING); if (conv == null) { try { conv = new C2BConverter(bb, DEFAULT_ENCODING); encoders.put(DEFAULT_ENCODING, conv); } catch (IOException ex) { // Ignore } } } */ } } // -------------------- BufferedOutputStream compatibility /** * Real write - this buffer will be sent to the client */ public void flushBytes() throws IOException { if (debug > 0) log("flushBytes() " + bb.getLength()); bb.flushBuffer(); } public int getBytesWritten() { return bytesWritten; } public int getCharsWritten() { return charsWritten; } public int getContentWritten() { return bytesWritten + charsWritten; } /** * True if this buffer hasn't been used ( since recycle() ) - * i.e. no chars or bytes have been added to the buffer. */ public boolean isNew() { return (bytesWritten == 0) && (charsWritten == 0); } public void setBufferSize(int size) { if (size > bb.getLimit()) {// ?????? bb.setLimit(size); } } public void reset() { //count=0; bb.recycle(); bytesWritten = 0; cb.recycle(); charsWritten = 0; gotEnc = false; enc = null; } public int getBufferSize() { return bb.getLimit(); } protected void log( String s ) { System.out.println("OutputBuffer: " + s); }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -