我正在使用SharedPreferences来保存JSONArray,然后在我没有连接到互联网时使用它。我应该检查保存数据的大小,因为我不想要任何大数据。我使用清晰的方法,但我想确保控制大小。我的保存和功能装载&清算;
public static void saveJSONArray(Context c, String prefName, String key, JSONArray array) {
SharedPreferences settings = c.getSharedPreferences(prefName, 0);
SharedPreferences.Editor editor = settings.edit();
editor.putString(key, array.toString());
editor.commit();
}
public static JSONArray loadJSONArray(Context c, String prefName, String key) throws JSONException {
SharedPreferences settings = c.getSharedPreferences(prefName, 0);
return new JSONArray(settings.getString(key, ""));
}
public static void clearPrefs(Context c, String prefName){
SharedPreferences settings = c.getSharedPreferences(prefName, 0);
SharedPreferences.Editor editor = settings.edit();
editor.clear();
editor.commit();
}
此功能正常运行。没有问题。但是我还需要一个能够返回所有数据大小的函数。我调查了它,但找不到任何解决方案。提前致谢。
答案 0 :(得分:3)
请参阅此代码:
public void cacheData(String data, String name) throws IOException {
File dataFile = new File(getCacheDir(), name.concat(".json"));
ObjectOutputStream objectOutputStream = new ObjectOutputStream(
new FileOutputStream(dataFile));
objectOutputStream.writeUTF(data);
objectOutputStream.close();
}
public String readData(String name) throws IOException {
File dataFile = new File(getCacheDir(), name.concat(".json"));
if (!dataFile.exists()) {
return null;
}
ObjectInputStream objectInputStream = new ObjectInputStream(
new FileInputStream(dataFile));
String data = objectInputStream.readUTF();
objectInputStream.close();
return data;
}
public long getDataLength(String name){
File dataFile = new File(getCacheDir(), name.concat(".json"));
if (!dataFile.exists()) {
return 0;
}
return dataFile.length();
}
由于我们使用“UTF-8”保存您的数据,因此数据长度可能与cp1256等其他编码不同
答案 1 :(得分:2)
您可以将字符串转换为字节,然后获取字节长度:
String data = array.toString();
byte[] byteArray = data.getBytes("UTF-8");
long size = byteArray.length;
答案 2 :(得分:1)
我使用了@AndyRes的想法并创建了一个名为 sizeOfSharedPrefs 的函数;
public static long sizeOfSharedPrefs(Context c, String prefName, String command){
SharedPreferences settings = c.getSharedPreferences(prefName, 0);
String data = settings.getString(command, "").toString();
byte[] byteArray = null;
try {
byteArray = data.getBytes("UTF-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
return byteArray.length;
}
它适用于我的其他功能。