public class compressionresponsestream extends servletoutputstream
protected void setbuffer(int threshold)
public void close() throws ioexception
/** 根據gzipstream是否為null,就可以判斷寫入的內容是否達到
* 啟用壓縮的臨界值,因為到達臨界值時,write方法會自動建立gzipstream物件
*/if (gzipstream != null) else
}output.close();
closed = true;
}public void flush() throws ioexception
if (gzipstream != null)
}/**
* 將buffer緩衝區中的資料寫入到gzipstream中
** @throws ioexception
*/public void flushtogzip() throws ioexception
}@override
public void write(int b) throws ioexception
/** 當寫入的資料達到啟用壓縮的臨界值時, 則先將buffer緩衝區的資料寫入到gzipstream物件中
*/if (buffercount >= buffer.length)
buffer[buffercount++] = (byte) b;
}public void write(byte b) throws ioexception
public void write(byte b, int off, int len) throws ioexception
if (len == 0)
/** 如果buffer緩衝區中剩餘的空間能夠容納要寫入的資料, 則先將這些資料寫入到buffer緩衝區中
*/if (len <= (buffer.length - buffercount))
/** 如果buffer緩衝區剩餘的空間不能容納要寫入的資料, 則先將buffer緩衝區的原有資料寫入到gzipstream物件中
*/flushtogzip();
/** 騰空buffer緩衝區資料後,判斷整個buffer緩衝區是否能夠容納要寫入的資料, 如果能將這些資料寫入到buffer緩衝區中
*/if (len <= (buffer.length - buffercount))
/** 如果整個buffer緩衝區的空間都不能容納要寫入的資料, 則直接將這些資料寫入gzipstream中
*/writetogzip(b, off, len);
}/**
* 將gzipstream物件中寫入資料,如果第一次寫入 則還需建立gzips實體物件
/*** 建立自定義response物件包括輸出流物件
* * @return
* @throws ioexception
*/public servletoutputstream createoutputstream() throws ioexception
/*** 為了防止目標servlet沒有關閉輸出流物件,filter呼叫該方法 以便自動關閉輸出流物件
*/public void finishresponse() else
}} catch (exception e)
} /**
* 覆蓋flushbuffer方法
*/public void flushbuffer() throws ioexception
/*** 覆蓋getoutputstream方法
*/public servletoutputstream getoutputstream() throws ioexception
if (stream == null)
return stream;
} public printwriter getwriter() throws ioexception
if (stream != null)
stream = createoutputstream();
string charenc = origresponse.getcharacterencoding();
if (charenc != null) else
return writer; }}
public class compressionfilter implements filter else
} else
} public void dofilter(servletrequest request, servletresponse response,
filterchain chain) throws ioexception, servletexception
/** 檢測客戶端瀏覽器是否支援gzip資料壓縮格式
使用Filter實現靜態HTML緩衝
緩衝是web應用中必須考慮的乙個提高效能的重要手段。對於基於jsp servlet技術的站點,常用的緩衝有持久層的資料庫連線池緩衝,記憶體中的值物件緩衝,jsp頁面緩衝,以及各種各樣的緩衝框架等等,無不是為了提高系統的吞吐量。然而對於大型站點來說,將jsp頁面轉換為靜態html也許是最高效的方法,特...
使用GZipStream實現壓縮和解壓縮
之前做專案,涉及到存入到資料庫或者http傳輸的資料量比較大,這個時候,就需要考慮在存入資料庫或者傳送傳輸之前,將資料壓縮下,當從資料庫中取出時,再解壓還原資料。特地找了下發現有gzipstream可以實現這個功能。此類表示gzip資料格式,該格式使用行業標準演算法進行無損檔案壓縮和解壓縮。該格式包...
使用logrotate實現日誌輪訓壓縮
配置選項說明 compress 通過gzip 壓縮轉儲舊的日誌 nocompress 不需要壓縮時,用這個引數 copytruncate 用於還在開啟中的日誌檔案,把當前日誌備份並截斷 nocopytruncate 備份日誌檔案但是不截斷 create mode owner group 使用指定的檔...