背景
在項目開發中,經常會遇到需要存儲不定長的對象數組,如上傳一組圖片、添加一道題目等等,這個時候在數據庫中存儲一般需要用到存儲長度較大的blob類型,在java的實體類中對應blob類型的是byte數組。
思路
為了存儲的數據格式兼容性更高,我采用的是借助json的方式來處理,即存儲前,我將對象整理為json數組,然后通過jsonArray轉為byte數組存儲到數據庫中,讀取時,將byte數組再反轉為jsonArry即可。這樣做的好處是,json是跨平台的,java存的這部分數據其他平台也能夠處理,且java在處理過程中不需要知道這個對象的內部結構,這一點是非常重要的,尤其是在byte數組轉對象的過程中,如果存的是一個java對象,那么必須要知道該對象的具體結構才能反轉出來,反轉過程非常復雜,這樣該對象也不易再進行擴展,json則可以隨時擴展,改變其中的結構。
方法類
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
public class JsonArrUtils {
/**
* json數組轉byte []
*/
public static byte[] toByteArray(JSONArray obj) {
return obj.toString().getBytes();
}
/**
* byte []轉json數組
*/
public static JSONArray toJsonArray(byte [] bytes) {
try {
return JSON.parseArray(new String(bytes));
}
catch (Exception e) {
return null;
}
}
}
操作
//存對象
entity.setValue(JsonArrUtils.toByteArray(dto.getValue()));
//取對象
JsonArrUtils.toJsonArray(entity.getValue());