com.alachisoft.ncache.serialization.standard.io.surrogates.DateArraySerializationSurrogate Maven / Gradle / Ivy
Show all versions of nc-serialization Show documentation
/*
* @(#)DoubleArraySerializationSurrogate.java 1.0
*
* Created on September 18, 2008, 12:59 PM
*
* Copyright 2008 NeXtreme Innovations, Inc. All rights reserved.
* "NeXtreme Innovations" PROPRIETARY/CONFIDENTIAL. Use is subject
* to license terms.
*/
package com.alachisoft.ncache.serialization.standard.io.surrogates;
import com.alachisoft.ncache.runtime.util.NCDateTime;
import com.alachisoft.ncache.serialization.core.io.NCacheObjectInput;
import com.alachisoft.ncache.serialization.core.io.NCacheObjectOutput;
import com.alachisoft.ncache.serialization.core.io.surrogates.BuiltinSerializationSurrogate;
import com.alachisoft.ncache.serialization.core.io.surrogates.NCacheIOException;
import com.alachisoft.ncache.serialization.core.io.surrogates.NCacheInstantiationException;
import com.alachisoft.ncache.serialization.core.io.surrogates.SerializationSurrogateImpl;
import java.io.IOException;
import java.util.Calendar;
import java.util.Date;
/**
* DoubleArraySerializationSurrogate is responsible for writing and reading
* instances of double[] class.
*
* @version 1.0, September 18, 2008
*/
public class DateArraySerializationSurrogate
extends SerializationSurrogateImpl
implements BuiltinSerializationSurrogate {
/**
* Creates a new instance of NxObjectArraySerializationSurrogate
*/
public DateArraySerializationSurrogate() {
super(Date[].class);
}
/**
* Creates instance of type returned by getRealClass(). This is different from NxSerializationSurrogateBase.createTypeInstance()
* in the sense that an NCacheObjectInput object is passed as parameter that can be used to read creation specific
* information from the stream. For example it can be used to read the length of the array before actually
* reading the values.
*
* The default implementation simply delegates to super.createTypeInstance().
*
* @param input stream reader
* @return Object that this surrogate must deserialize
* @throws NCacheInstantiationException Object creation related exceptions.
*/
@Override
public Object instantiate(NCacheObjectInput input)
throws NCacheInstantiationException {
try {
int length = input.readInt();
return new Date[length];
} catch (IOException ex) {
throw new NCacheInstantiationException(ex);
}
}
/**
* Read an object of type returned by getRealClass() from the stream reader.
* A fresh instance of the object is passed as parameter.
* The surrogate should populate fields in the object from data on the stream
*
* @param input stream reader
* @param graph a fresh instance of the object that the surrogate must deserialize.
* @return object read from the stream reader
* @throws NCacheInstantiationException Object creation related exceptions.
* @throws NCacheIOException Any of the usual Input/Output related exceptions.
*/
public Object readDirect(NCacheObjectInput input, Object graph)
throws NCacheInstantiationException, NCacheIOException {
Date[] array = (Date[]) graph;
int len = array.length;
try {
for (int i = 0; i < len; i++) {
array[i] = (new NCDateTime(input.readLong())).getDate();
}
} catch (IOException ex) {
throw new NCacheIOException(ex);
}
return array;
}
/**
* Write an object of type returned by getRealClass() to the stream writer
*
* @param output stream writer
* @param graph object to be written to the stream reader
* @throws NCacheIOException Any of the usual Input/Output related exceptions.
*/
public void writeDirect(NCacheObjectOutput output, Object graph)
throws NCacheIOException {
Date[] array = (Date[]) graph;
int len = array.length;
try {
output.writeInt(len);
for (int i = 0; i < len; i++) {
Calendar c = Calendar.getInstance();
c.clear();
c.set(Calendar.MILLISECOND, 0);
c.setTime((Date) array[i]);
//long ticks = ((date.getTime() + TimeZone.getDefault().getRawOffset()) * 10000) + DIFF;
NCDateTime ncdt = new NCDateTime(c.get(Calendar.YEAR), c.get(Calendar.MONTH) + 1, c.get(Calendar.DAY_OF_MONTH), c.get(Calendar.HOUR_OF_DAY), c.get(Calendar.MINUTE), c.get(Calendar.SECOND), c.get(Calendar.MILLISECOND));
output.writeLong(ncdt.getTicks());
}
} catch (IOException ex) {
throw new NCacheIOException(ex);
} catch (IllegalArgumentException arg) {
throw new NCacheIOException(arg);
}
}
@Override
public void skipDirect(NCacheObjectInput input, Object graph) throws NCacheInstantiationException, NCacheIOException {
Date[] array = (Date[]) graph;
int len = array.length;
try {
for (int i = 0; i < len; i++) {
array[i] = (new NCDateTime(input.readLong())).getDate();
}
} catch (IOException ex) {
throw new NCacheIOException(ex);
}
}
}