Spring httpInvokerにおけるフロントバックグラウンドデータ圧縮伝送の試み
3407 ワード
目的:バックグラウンドでGZIPのフォーマットを使ってメモリの中のデータを圧縮して、フロントに転送して解凍しています
メカニズム:javaのGZIPInputStream
プロセス:
1:インタフェースを変更しbyte配列を返す
2:対応方法を修正し、転送したデータを圧縮する
3:フロント対応の取得方法を修正し、解凍復元を行う
OK、ここまで来ると、転送されたデータは圧縮されています!
拡張:圧縮に失敗した場合、catchで異常をキャプチャし、圧縮を行わないbyte配列を返すには、インタフェースにフラグを追加して、クライアントに過圧縮を行ったかどうかを伝える必要があります.
拡張2:対応する圧縮と解凍方法はツールクラスに入れることができます.
メカニズム:javaのGZIPInputStream
プロセス:
1:インタフェースを変更しbyte配列を返す
/**
* bytes
* **
*
* @return
*/
public byte [] loadVOsBytes();
2:対応方法を修正し、転送したデータを圧縮する
/**
* bytes
* **
*
* @return
*/
public byte[] loadVOsBytes() {
//
FunVO[] vos = loadVOs();
//
byte[] zipBytes = null;
ByteArrayOutputStream byteOut;
GZIPOutputStream gzout;
ObjectOutputStream objectOut;
try {
//
byteOut = new ByteArrayOutputStream();
// gzip
gzout = new GZIPOutputStream(byteOut);
//
objectOut = new ObjectOutputStream(gzout);
objectOut.writeObject(vos);
objectOut.flush();
//
zipBytes = byteOut.toByteArray();
} catch (IOException e) {
e.printStackTrace();
throw new RuntimeException(e);
} finally {
if (byteOut != null) {
byteOut.close();
}
if (gzout != null) {
gzout.close();
}
if (objectOut != null) {
objectOut.close();
}
}
return zipBytes;
}
3:フロント対応の取得方法を修正し、解凍復元を行う
/**
* ( )
* @return
*/
public FunVO[] getVOs() {
if (vos == null) {
byte[] zipBytes = login.loadVOsBytes();
ByteArrayInputStream byteIn;
GZIPInputStream gzIn;
ObjectInputStream objectIn;
try {
//
byteIn = new ByteArrayInputStream(zipBytes);
// gzip
gzIn = new GZIPInputStream(byteIn);
//
objectIn = new ObjectInputStream(gzIn);
//
vos = (FunVO[]) objectIn.readObject();
} catch (ClassNotFoundException e) {
e.printStackTrace();
throw new RuntimeException(e);
} catch (IOException e) {
e.printStackTrace();
throw new RuntimeException(e);
} finally {
if (byteIn != null) {
byteIn.close();
}
if (gzIn != null) {
gzIn.close();
}
if (objectIn != null) {
objectIn.close();
}
}
}
return vos;
}
OK、ここまで来ると、転送されたデータは圧縮されています!
拡張:圧縮に失敗した場合、catchで異常をキャプチャし、圧縮を行わないbyte配列を返すには、インタフェースにフラグを追加して、クライアントに過圧縮を行ったかどうかを伝える必要があります.
拡張2:対応する圧縮と解凍方法はツールクラスに入れることができます.