< prev index next >
src/java.base/share/classes/java/io/ObjectInputStream.java
Print this page
@@ -2412,26 +2412,10 @@
}
clear();
}
/**
- * Converts specified span of bytes into float values.
- */
- // REMIND: remove once hotspot inlines Float.intBitsToFloat
- private static native void bytesToFloats(byte[] src, int srcpos,
- float[] dst, int dstpos,
- int nfloats);
-
- /**
- * Converts specified span of bytes into double values.
- */
- // REMIND: remove once hotspot inlines Double.longBitsToDouble
- private static native void bytesToDoubles(byte[] src, int srcpos,
- double[] dst, int dstpos,
- int ndoubles);
-
- /**
* Returns the first non-null and non-platform class loader (not counting
* class loaders of generated reflection implementation classes) up the
* execution stack, or the platform class loader if only code from the
* bootstrap and platform class loader is on the stack.
*/
@@ -3431,26 +3415,28 @@
}
}
}
void readFloats(float[] v, int off, int len) throws IOException {
- int span, endoff = off + len;
+ int stop, endoff = off + len;
while (off < endoff) {
if (!blkmode) {
- span = Math.min(endoff - off, MAX_BLOCK_SIZE >> 2);
+ int span = Math.min(endoff - off, MAX_BLOCK_SIZE >> 2);
in.readFully(buf, 0, span << 2);
+ stop = off + span;
pos = 0;
} else if (end - pos < 4) {
v[off++] = din.readFloat();
continue;
} else {
- span = Math.min(endoff - off, ((end - pos) >> 2));
+ stop = Math.min(endoff, ((end - pos) >> 2));
}
- bytesToFloats(buf, pos, v, off, span);
- off += span;
- pos += span << 2;
+ while (off < stop) {
+ v[off++] = Bits.getFloat(buf, pos);
+ pos += 4;
+ }
}
}
void readLongs(long[] v, int off, int len) throws IOException {
int stop, endoff = off + len;
@@ -3473,26 +3459,28 @@
}
}
}
void readDoubles(double[] v, int off, int len) throws IOException {
- int span, endoff = off + len;
+ int stop, endoff = off + len;
while (off < endoff) {
if (!blkmode) {
- span = Math.min(endoff - off, MAX_BLOCK_SIZE >> 3);
+ int span = Math.min(endoff - off, MAX_BLOCK_SIZE >> 3);
in.readFully(buf, 0, span << 3);
+ stop = off + span;
pos = 0;
} else if (end - pos < 8) {
v[off++] = din.readDouble();
continue;
} else {
- span = Math.min(endoff - off, ((end - pos) >> 3));
+ stop = Math.min(endoff - off, ((end - pos) >> 3));
}
- bytesToDoubles(buf, pos, v, off, span);
- off += span;
- pos += span << 3;
+ while (off < stop) {
+ v[off++] = Bits.getDouble(buf, pos);
+ pos += 8;
+ }
}
}
/**
* Reads in string written in "long" UTF format. "Long" UTF format is
< prev index next >