public <T> T readObject(ByteBuffer data, Class<T> c) throws IOException { byte dimensionCount = data.get(); if (dimensionCount == 0) return null; int[] dimensions = new int[dimensionCount]; for (int i = 0; i < dimensionCount; i++) dimensions[i] = data.getInt(); Serializer elementSerializer = null; Class elementClass = c; while (elementClass.getComponentType() != null) elementClass = elementClass.getComponentType(); if (Modifier.isFinal(elementClass.getModifiers())) elementSerializer = Serializer.getSerializer(elementClass); // Create array and read in the data. T array = (T)Array.newInstance(elementClass, dimensions); readArray(elementSerializer, elementClass, data, array, 0, dimensions); return array; }
private void readArray (Serializer elementSerializer, Class elementClass, ByteBuffer buffer, Object array, int dimension, int[] dimensions) throws IOException { boolean elementsAreArrays = dimension < dimensions.length - 1; int length; if (dimension == 0) { length = dimensions[0]; } else { length = buffer.getInt(); } for (int i = 0; i < length; i++) { if (elementsAreArrays) { // Nested array. Object element = Array.get(array, i); if (element != null) readArray(elementSerializer, elementClass, buffer, element, dimension + 1, dimensions); } else if (elementSerializer != null) { // Use same converter (and class) for all elements. Array.set(array, i, elementSerializer.readObject(buffer, elementClass)); } else { // Each element could be a different type. Look up the class with the object. Array.set(array, i, Serializer.readClassAndObject(buffer)); } } } }
public <T> T readObject(ByteBuffer data, Class<T> c) throws IOException { byte dimensionCount = data.get(); if (dimensionCount == 0) return null; int[] dimensions = new int[dimensionCount]; for (int i = 0; i < dimensionCount; i++) dimensions[i] = data.getInt(); Serializer elementSerializer = null; Class elementClass = c; while (elementClass.getComponentType() != null) elementClass = elementClass.getComponentType(); if (Modifier.isFinal(elementClass.getModifiers())) elementSerializer = Serializer.getSerializer(elementClass); // Create array and read in the data. T array = (T)Array.newInstance(elementClass, dimensions); readArray(elementSerializer, elementClass, data, array, 0, dimensions); return array; }
public <T> T readObject(ByteBuffer data, Class<T> c) throws IOException { byte dimensionCount = data.get(); if (dimensionCount == 0) return null; int[] dimensions = new int[dimensionCount]; for (int i = 0; i < dimensionCount; i++) dimensions[i] = data.getInt(); Serializer elementSerializer = null; Class elementClass = c; while (elementClass.getComponentType() != null) elementClass = elementClass.getComponentType(); if (Modifier.isFinal(elementClass.getModifiers())) elementSerializer = Serializer.getSerializer(elementClass); // Create array and read in the data. T array = (T)Array.newInstance(elementClass, dimensions); readArray(elementSerializer, elementClass, data, array, 0, dimensions); return array; }
private void readArray (Serializer elementSerializer, Class elementClass, ByteBuffer buffer, Object array, int dimension, int[] dimensions) throws IOException { boolean elementsAreArrays = dimension < dimensions.length - 1; int length; if (dimension == 0) { length = dimensions[0]; } else { length = buffer.getInt(); } for (int i = 0; i < length; i++) { if (elementsAreArrays) { // Nested array. Object element = Array.get(array, i); if (element != null) readArray(elementSerializer, elementClass, buffer, element, dimension + 1, dimensions); } else if (elementSerializer != null) { // Use same converter (and class) for all elements. Array.set(array, i, elementSerializer.readObject(buffer, elementClass)); } else { // Each element could be a different type. Look up the class with the object. Array.set(array, i, Serializer.readClassAndObject(buffer)); } } } }
private void readArray (Serializer elementSerializer, Class elementClass, ByteBuffer buffer, Object array, int dimension, int[] dimensions) throws IOException { boolean elementsAreArrays = dimension < dimensions.length - 1; int length; if (dimension == 0) { length = dimensions[0]; } else { length = buffer.getInt(); } for (int i = 0; i < length; i++) { if (elementsAreArrays) { // Nested array. Object element = Array.get(array, i); if (element != null) readArray(elementSerializer, elementClass, buffer, element, dimension + 1, dimensions); } else if (elementSerializer != null) { // Use same converter (and class) for all elements. Array.set(array, i, elementSerializer.readObject(buffer, elementClass)); } else { // Each element could be a different type. Look up the class with the object. Array.set(array, i, Serializer.readClassAndObject(buffer)); } } } }