以下のアルゴリズムを使用して json ファイルを gzip しました (from: java gzip can't keep original file's extension name )
private static boolean compress(String inputFileName, String targetFileName){
boolean compressResult=true;
int BUFFER = 1024*4;
byte[] B_ARRAY = new byte[BUFFER];
FileInputStream fins=null;
FileOutputStream fout=null;
GZIPOutputStream zout=null;
try{
File srcFile=new File(inputFileName);
fins=new FileInputStream (srcFile);
File tatgetFile=new File(targetFileName);
fout = new FileOutputStream(tatgetFile);
zout = new GZIPOutputStream(fout);
int number = 0;
while((number = fins.read(B_ARRAY, 0, BUFFER)) != -1){
zout.write(B_ARRAY, 0, number);
}
}catch(Exception e){
e.printStackTrace();
compressResult=false;
}finally{
try {
zout.close();
fout.close();
fins.close();
} catch (IOException e) {
e.printStackTrace();
compressResult=false;
}
}
return compressResult;
}
JSONを返しています
response.setHeader("Content-Type", "application/json");
response.setHeader("Content-Encoding", "gzip");
response.setHeader("Vary", "Accept-Encoding");
response.setContentType("application/json");
response.setHeader("Content-Disposition","gzip");
response.sendRedirect(filePathurl);
また
request.getRequestDispatcher(filePathurl).forward(request, response);
以下のように AJAX コードを使用して JSON オブジェクトにアクセスしようとしています。
$.ajax({
type : 'GET',
url : url,
headers : {'Accept-Encoding' : 'gzip'},
dataType : 'text',
表示される出力は、圧縮解除された JSON 文字列ではなく、バイナリ データです。これを機能させる方法について何か提案はありますか? 私が使用しているブラウザ (IE、Chrome、FF) は gzip をサポートしていることに注意してください。これは、Apache によって gzip されたすべての静的コンテンツが正しくレンダリングされるためです。