Skip to content

Commit 41eda10

Browse files
author
haileyajohnson
authored
Merge pull request #968 from haileyajohnson/cast-bytebuffer
[5.x] address buffer method disparity among java versions
2 parents 8e741ea + 3977181 commit 41eda10

2 files changed

Lines changed: 19 additions & 17 deletions

File tree

cdm/core/src/main/java/ucar/nc2/util/IO.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55

66
package ucar.nc2.util;
77

8+
import java.nio.Buffer;
89
import java.nio.charset.StandardCharsets;
910
import ucar.nc2.constants.CDM;
1011
import java.io.*;
@@ -147,7 +148,7 @@ public static long copy2null(FileChannel in, int buffersize) throws IOException
147148
if (n == -1)
148149
break;
149150
totalBytesRead += n;
150-
buffer.flip();
151+
((Buffer) buffer).flip();
151152
}
152153
return totalBytesRead;
153154
}
@@ -171,7 +172,7 @@ public static long touch(FileChannel in, int buffersize) throws IOException {
171172
for (int i = 0; i < buffersize; i++)
172173
touch += result[i];
173174

174-
buffer.flip();
175+
((Buffer) buffer).flip();
175176
}
176177
return touch;
177178
}
@@ -397,7 +398,7 @@ public static void copyFileWithChannels(File fileIn, WritableByteChannel out) th
397398
* // The read() call leaves the buffer in "fill mode". To prepare
398399
* // to write bytes from the bufferwe have to put it in "drain mode"
399400
* // by flipping it: setting limit to position and position to zero
400-
* buffer.flip();
401+
* ((Buffer) buffer).flip();
401402
*
402403
* // Now write some or all of the bytes out to the output channel
403404
* out.write(buffer);

cdm/misc/src/main/java/ucar/nc2/geotiff/GeoTiff.java

Lines changed: 15 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
import java.io.PrintWriter;
1111
import java.io.RandomAccessFile;
1212
import java.io.StringWriter;
13+
import java.nio.Buffer;
1314
import java.nio.ByteBuffer;
1415
import java.nio.ByteOrder;
1516
import java.nio.FloatBuffer;
@@ -203,7 +204,7 @@ int writeData(float[] data, int imageNumber) throws IOException {
203204
ByteBuffer direct = ByteBuffer.allocateDirect(4 * data.length);
204205
FloatBuffer buffer = direct.asFloatBuffer();
205206
buffer.put(data);
206-
// buffer.flip();
207+
// ((Buffer) buffer).flip();
207208
channel.write(direct);
208209

209210
if (imageNumber == 1)
@@ -232,7 +233,7 @@ void writeMetadata(int imageNumber) throws IOException {
232233
if (debugRead)
233234
System.out.println("position before writing nextIFD= " + channel.position() + " IFD is " + firstIFD);
234235
buffer.putInt(firstIFD);
235-
buffer.flip();
236+
((Buffer) buffer).flip();
236237
channel.write(buffer);
237238
}
238239
writeIFD(channel, firstIFD);
@@ -247,7 +248,7 @@ private int writeHeader(FileChannel channel) throws IOException {
247248
buffer.putShort((short) 42);
248249
buffer.putInt(firstIFD);
249250

250-
buffer.flip();
251+
((Buffer) buffer).flip();
251252
channel.write(buffer);
252253

253254
return firstIFD;
@@ -272,7 +273,7 @@ private void writeIFD(FileChannel channel, int start) throws IOException {
272273
ByteBuffer buffer = ByteBuffer.allocate(2);
273274
int n = tags.size();
274275
buffer.putShort((short) n);
275-
buffer.flip();
276+
((Buffer) buffer).flip();
276277
channel.write(buffer);
277278

278279
start += 2;
@@ -291,7 +292,7 @@ private void writeIFD(FileChannel channel, int start) throws IOException {
291292
System.out.println("pos before writing nextIFD= " + channel.position());
292293
buffer = ByteBuffer.allocate(4);
293294
buffer.putInt(0);
294-
buffer.flip();
295+
((Buffer) buffer).flip();
295296
channel.write(buffer);
296297
}
297298

@@ -308,18 +309,18 @@ private void writeIFDEntry(FileChannel channel, IFDEntry ifd, int start) throws
308309
int done = writeValues(buffer, ifd);
309310
for (int k = 0; k < 4 - done; k++) // fill out to 4 bytes
310311
buffer.put((byte) 0);
311-
buffer.flip();
312+
((Buffer) buffer).flip();
312313
channel.write(buffer);
313314

314315
} else { // write offset
315316
buffer.putInt(nextOverflowData);
316-
buffer.flip();
317+
((Buffer) buffer).flip();
317318
channel.write(buffer);
318319
// write data
319320
channel.position(nextOverflowData);
320321
ByteBuffer vbuffer = ByteBuffer.allocate(size);
321322
writeValues(vbuffer, ifd);
322-
vbuffer.flip();
323+
((Buffer) vbuffer).flip();
323324
channel.write(vbuffer);
324325
nextOverflowData += size;
325326
}
@@ -417,7 +418,7 @@ private int readHeader(FileChannel channel) throws IOException {
417418
ByteBuffer buffer = ByteBuffer.allocate(8);
418419
int n = channel.read(buffer);
419420
assert n == 8;
420-
buffer.flip();
421+
((Buffer) buffer).flip();
421422
if (showHeaderBytes) {
422423
printBytes(System.out, "header", buffer, 4);
423424
buffer.rewind();
@@ -443,7 +444,7 @@ private int readIFD(FileChannel channel, int start) throws IOException {
443444

444445
int n = channel.read(buffer);
445446
assert n == 2;
446-
buffer.flip();
447+
((Buffer) buffer).flip();
447448
if (showBytes) {
448449
printBytes(System.out, "IFD", buffer, 2);
449450
buffer.rewind();
@@ -468,7 +469,7 @@ private int readIFD(FileChannel channel, int start) throws IOException {
468469
buffer = ByteBuffer.allocate(4);
469470
buffer.order(byteOrder);
470471
assert 4 == channel.read(buffer);
471-
buffer.flip();
472+
((Buffer) buffer).flip();
472473
int nextIFD = buffer.getInt();
473474
if (debugRead)
474475
System.out.println(" nextIFD == " + nextIFD);
@@ -484,7 +485,7 @@ private IFDEntry readIFDEntry(FileChannel channel, int start) throws IOException
484485
buffer.order(byteOrder);
485486
int n = channel.read(buffer);
486487
assert n == 12;
487-
buffer.flip();
488+
((Buffer) buffer).flip();
488489
if (showBytes)
489490
printBytes(System.out, "IFDEntry bytes", buffer, 12);
490491

@@ -509,7 +510,7 @@ private IFDEntry readIFDEntry(FileChannel channel, int start) throws IOException
509510
ByteBuffer vbuffer = ByteBuffer.allocate(ifd.count * ifd.type.size);
510511
vbuffer.order(byteOrder);
511512
assert ifd.count * ifd.type.size == channel.read(vbuffer);
512-
vbuffer.flip();
513+
((Buffer) vbuffer).flip();
513514
readValues(vbuffer, ifd);
514515
}
515516

@@ -670,7 +671,7 @@ ByteBuffer testReadData(int offset, int size) throws IOException {
670671
ByteBuffer buffer = ByteBuffer.allocate(size);
671672
buffer.order(byteOrder);
672673
assert size == channel.read(buffer);
673-
buffer.flip();
674+
((Buffer) buffer).flip();
674675
return buffer;
675676
}
676677
}

0 commit comments

Comments
 (0)