Revision 43876 branches/org.gvsig.desktop-2018a/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.bsq/src/main/java/org/gvsig/fmap/dal/file/bsq/BSQBandPageManager.java

View differences:

BSQBandPageManager.java
6 6
import java.io.RandomAccessFile;
7 7
import java.nio.Buffer;
8 8
import java.nio.ByteBuffer;
9
import java.nio.ByteOrder;
9 10
import java.nio.DoubleBuffer;
10 11
import java.nio.FloatBuffer;
11 12
import java.nio.IntBuffer;
......
26 27
    private final int dataType;
27 28
    private final File file;
28 29
    private final long startpos;
30
    private final ByteOrder byteOrder;
29 31

  
30 32
    /**
31 33
     * @param file
......
33 35
     * @param rows
34 36
     * @param columns
35 37
     * @param dataType
38
     * @param byteOrder
36 39
     * @throws IOException
37 40
     */
38
    public BSQBandPageManager(File file, long startpos, int rows, int columns, int dataType) throws IOException {
41
    public BSQBandPageManager(File file, long startpos, int rows, int columns, int dataType, ByteOrder  byteOrder) throws IOException {
39 42
        this.rows = rows;
40 43
        this.columns = columns;
41 44
        this.dataType = dataType;
42 45
        this.file = file;
43 46
        this.startpos = startpos;
47
        this.byteOrder = byteOrder;
44 48

  
45 49
        this.raf = new RandomAccessFile(this.file, "r");
46 50
        // BufferManager bufferManager = BufferLocator.getBufferManager();
......
55 59
        raf.seek(pos);
56 60
        BufferManager bufferManager = BufferLocator.getBufferManager();
57 61
        int dataTypeSize = bufferManager.getDataTypeSize(dataType);
58
        byte[] byteArray = new byte[buffer.capacity() * dataTypeSize];
59
        raf.read(byteArray);
62
        int elements = buffer.capacity();
63
        
64
        ByteBuffer byteBuffer = ByteBuffer.allocate(elements * dataTypeSize);
65
        byteBuffer.order(this.byteOrder);
66
        raf.read(byteBuffer.array());
67

  
60 68
        buffer.rewind();
69
        byteBuffer.rewind();
61 70

  
62 71
        switch (dataType) {
63 72
        case BufferManager.TYPE_BYTE:
64
            //FIXME: Elegir cual de las dos siguientes maneras de hacerlo es la id?nea
65

  
66
            ((ByteBuffer) buffer).put(byteArray, 0, byteArray.length);
67
//            System.arraycopy(byteArray, 0, ((ByteBuffer) buffer).array(), 0, byteArray.length);
73
            ((ByteBuffer) buffer).put(byteBuffer);
68 74
            break;
69 75
        case BufferManager.TYPE_SHORT:
70 76
        case BufferManager.TYPE_USHORT:
71
            for( int cell =0 ; cell<byteArray.length ; cell++ ) {
72
                ((ShortBuffer) buffer).put((int)(cell/dataTypeSize), byteArray[cell]);
77
            for( int element =0 ; element<elements ; element++ ) {
78
                ((ShortBuffer) buffer).put(byteBuffer.getShort());
73 79
            }
74 80
            break;
75 81
        case BufferManager.TYPE_INT:
76
            for( int cell =0 ; cell<byteArray.length ; cell++ ) {
77
                ((IntBuffer) buffer).put((int)(cell/dataTypeSize), byteArray[cell]);
82
            for( int element =0 ; element<elements ; element++ ) {
83
                ((IntBuffer) buffer).put(byteBuffer.getInt());
78 84
            }
79 85
            break;
80 86
        case BufferManager.TYPE_FLOAT:
81
            for( int cell =0 ; cell<byteArray.length ; cell++ ) {
82
                ((FloatBuffer) buffer).put((int)(cell/dataTypeSize), byteArray[cell]);
87
            for( int element=0 ; element<elements ; element++ ) {
88
                ((FloatBuffer) buffer).put(byteBuffer.getFloat());
83 89
            }
84 90
            break;
85 91

  
86 92
        case BufferManager.TYPE_DOUBLE:
87
            for( int cell =0 ; cell<byteArray.length ; cell++ ) {
88
                ((DoubleBuffer) buffer).put((int)(cell/dataTypeSize), byteArray[cell]);
93
            for( int element=0 ; element<elements ; element++ ) {
94
                ((DoubleBuffer) buffer).put(byteBuffer.getDouble());
89 95
            }
90 96
            break;
91 97

  
......
97 103
    @Override
98 104
    public void save(Buffer buffer, int row, int rows, int dataType) throws IOException {
99 105

  
100
        long pos = row*this.columns + this.startpos;
101
        raf.seek(pos);
102

  
103
        BufferManager bufferManager = BufferLocator.getBufferManager();
104
        ByteBuffer byteBuffer = ByteBuffer.allocate(buffer.capacity() * bufferManager.getDataTypeSize(dataType));
105
        switch (dataType) {
106
        case BufferManager.TYPE_BYTE:
107
            byteBuffer.put(((ByteBuffer)buffer).array());
108
            break;
109
        case BufferManager.TYPE_SHORT:
110
        case BufferManager.TYPE_USHORT:
111
            ShortBuffer byteAsShortBuffer = byteBuffer.asShortBuffer();
112
            byteAsShortBuffer.put((short[]) buffer.array());
113
            break;
114
        case BufferManager.TYPE_INT:
115
            IntBuffer byteAsIntBuffer = byteBuffer.asIntBuffer();
116
            byteAsIntBuffer.put((int[]) buffer.array());
117
            break;
118
        case BufferManager.TYPE_FLOAT:
119
            FloatBuffer byteAsFloatBuffer = byteBuffer.asFloatBuffer();
120
            byteAsFloatBuffer.put((float[]) buffer.array());
121
            break;
122
        case BufferManager.TYPE_DOUBLE:
123
            DoubleBuffer byteAsDoubleBuffer = byteBuffer.asDoubleBuffer();
124
            byteAsDoubleBuffer.put((double[]) buffer.array());
125
            break;
126
        default:
127
            throw new IllegalArgumentException("Data Type " + dataType + " not supported.");
128
        }
129
        raf.write(byteBuffer.array());
130

  
131 106
    }
132 107

  
133 108
    @Override

Also available in: Unified diff