Cache یک json - چگونه؟ (حل شد.)
سلام
یه برنامه از طریق json از سرور یه آرایه دریافت میکنه. چطور میشه این json یا آرایه رو cache کرد؟
ممنون میشم اگه کد بنویسید و توضیحات کامل باشه. سپاس















این دوتا کار نوشتن و خوندن رو انجام میدن
private void saveToCache(long when, String data) {
ObjectOutputStream outputStream = null;
try {
outputStream = new ObjectOutputStream(new FileOutputStream(cacheDir + "/" + cacheFileName));
outputStream.writeLong(when);
outputStream.writeInt(data.length());
outputStream.write(data.getBytes());
}
catch (StreamCorruptedException e) {
e.printStackTrace();
}
catch (FileNotFoundException e) {
e.printStackTrace();
}
catch (IOException e) {
e.printStackTrace();
} finally {
if (outputStream != null) {
try {
outputStream.flush();
}
catch (IOException e) {
e.printStackTrace();
}
try {
outputStream.close();
}
catch (IOException e) {
e.printStackTrace();
}
}
}
}
private String readFromCache() {
ObjectInputStream inputStream = null;
try {
inputStream = new ObjectInputStream(new FileInputStream(cacheDir + "/" + cacheFileName));
long when = inputStream.readLong();
long now = System.currentTimeMillis();
if (now - when > cacheExpireTime * 1000) {
new File(cacheDir + "/cache.dat").delete();
return null;
}
int bytesLength = inputStream.readInt();
byte[] buffer = new byte[bytesLength];
inputStream.read(buffer, 0, bytesLength);
String output = new String(buffer);
return output;
}
catch (StreamCorruptedException e) {
e.printStackTrace();
}
catch (FileNotFoundException e) {
e.printStackTrace();
}
catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (inputStream != null) {
inputStream.close();
}
}
catch (IOException e) {
e.printStackTrace();
}
}
return null;
}

من جدا کلافه شدم.
فایل کش رو بررسی کردم و دیتا درست ذخیره میشه، فکرمیکنم مشکل از تابع read باشه. و جالب اینکه برای جیسون هایی که طول کمتر از 1012 کاراکتر دارن، درست اجرا میشه و مشکلی نداره. اما بالای این رقم نمیتونه دیتا رو بخونه!
لطفا کمک کنید!
حل شد! تابع read فقط 1024 کاراکتر اول رو میخونه. بجای read() باید از readFully() استفاده کرد.

با تشکر از مرتضی، برای توضیح بیشتر : در متد readFromCache به صورت زیر تغییر رو ایجاد کنید.
inputStream.read(buffer, 0, bytesLenght);
تغییر کند به
inputStream.readFully(buffer, 0, bytesLenght);

من دقیقا از کد استاد استفاده میکنم چند بار هم ویدئو رو دیدم ولی باز نشد اگه میتونین کدی که جواب گرفتین رو همینجا قرار بدین که خیلی خوب میشه.
privatevoid saveToCache(longwhen,String data){
ObjectOutputStream outputStream =null;
try{
outputStream =newObjectOutputStream(newFileOutputStream(cacheDir +"/"+ cacheFileName));
outputStream.writeLong(when);
outputStream.writeInt(data.length());
outputStream.write(data.getBytes());
}
catch(StreamCorruptedException e){
e.printStackTrace();
}
catch(FileNotFoundException e){
e.printStackTrace();
}
catch(IOException e){
e.printStackTrace();
}finally{
if(outputStream !=null){
try{
outputStream.flush();
}
catch(IOException e){
e.printStackTrace();
}
try{
outputStream.close();
}
catch(IOException e){
e.printStackTrace();
}
}
}
}
privateString readFromCache(){
ObjectInputStream inputStream =null;
try{
inputStream =newObjectInputStream(newFileInputStream(cacheDir +"/"+ cacheFileName));
longwhen= inputStream.readLong();
long now =System.currentTimeMillis();
if(now -when> cacheExpireTime *1000){
newFile(cacheDir +"/cache.dat").delete();
returnnull;
}
int bytesLength = inputStream.readInt();
byte[] buffer =newbyte[bytesLength];
inputStream.read(buffer,0, bytesLength);
String output =newString(buffer);
return output;
}
catch(StreamCorruptedException e){
e.printStackTrace();
}
catch(FileNotFoundException e){
e.printStackTrace();
}
catch(IOException e){
e.printStackTrace();
}finally{
try{
if(inputStream !=null){
inputStream.close();
}
}
catch(IOException e){
e.printStackTrace();
}
}
returnnull;
}
پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .