Java Code Examples for jdk.internal.misc.Unsafe#INVALID_FIELD_OFFSET
The following examples show how to use
jdk.internal.misc.Unsafe#INVALID_FIELD_OFFSET .
You can vote up the ones you like or vote down the ones you don't like,
and go to the original project or source file by following the links above each example. You may check out the related API usage on the sidebar.
Example 1
Source File: ObjectStreamClass.java From Bytecoder with Apache License 2.0 | 5 votes |
/** * Constructs FieldReflector capable of setting/getting values from the * subset of fields whose ObjectStreamFields contain non-null * reflective Field objects. ObjectStreamFields with null Fields are * treated as filler, for which get operations return default values * and set operations discard given values. */ FieldReflector(ObjectStreamField[] fields) { this.fields = fields; int nfields = fields.length; readKeys = new long[nfields]; writeKeys = new long[nfields]; offsets = new int[nfields]; typeCodes = new char[nfields]; ArrayList<Class<?>> typeList = new ArrayList<>(); Set<Long> usedKeys = new HashSet<>(); for (int i = 0; i < nfields; i++) { ObjectStreamField f = fields[i]; Field rf = f.getField(); long key = (rf != null) ? unsafe.objectFieldOffset(rf) : Unsafe.INVALID_FIELD_OFFSET; readKeys[i] = key; writeKeys[i] = usedKeys.add(key) ? key : Unsafe.INVALID_FIELD_OFFSET; offsets[i] = f.getOffset(); typeCodes[i] = f.getTypeCode(); if (!f.isPrimitive()) { typeList.add((rf != null) ? rf.getType() : null); } } types = typeList.toArray(new Class<?>[typeList.size()]); numPrimFields = nfields - types.length; }
Example 2
Source File: ObjectStreamClass.java From Bytecoder with Apache License 2.0 | 5 votes |
private void setObjFieldValues(Object obj, Object[] vals, boolean dryRun) { if (obj == null) { throw new NullPointerException(); } for (int i = numPrimFields; i < fields.length; i++) { long key = writeKeys[i]; if (key == Unsafe.INVALID_FIELD_OFFSET) { continue; // discard value } switch (typeCodes[i]) { case 'L': case '[': Object val = vals[offsets[i]]; if (val != null && !types[i - numPrimFields].isInstance(val)) { Field f = fields[i].getField(); throw new ClassCastException( "cannot assign instance of " + val.getClass().getName() + " to field " + f.getDeclaringClass().getName() + "." + f.getName() + " of type " + f.getType().getName() + " in instance of " + obj.getClass().getName()); } if (!dryRun) unsafe.putReference(obj, key, val); break; default: throw new InternalError(); } } }
Example 3
Source File: ObjectStreamClass.java From openjdk-jdk9 with GNU General Public License v2.0 | 5 votes |
/** * Constructs FieldReflector capable of setting/getting values from the * subset of fields whose ObjectStreamFields contain non-null * reflective Field objects. ObjectStreamFields with null Fields are * treated as filler, for which get operations return default values * and set operations discard given values. */ FieldReflector(ObjectStreamField[] fields) { this.fields = fields; int nfields = fields.length; readKeys = new long[nfields]; writeKeys = new long[nfields]; offsets = new int[nfields]; typeCodes = new char[nfields]; ArrayList<Class<?>> typeList = new ArrayList<>(); Set<Long> usedKeys = new HashSet<>(); for (int i = 0; i < nfields; i++) { ObjectStreamField f = fields[i]; Field rf = f.getField(); long key = (rf != null) ? unsafe.objectFieldOffset(rf) : Unsafe.INVALID_FIELD_OFFSET; readKeys[i] = key; writeKeys[i] = usedKeys.add(key) ? key : Unsafe.INVALID_FIELD_OFFSET; offsets[i] = f.getOffset(); typeCodes[i] = f.getTypeCode(); if (!f.isPrimitive()) { typeList.add((rf != null) ? rf.getType() : null); } } types = typeList.toArray(new Class<?>[typeList.size()]); numPrimFields = nfields - types.length; }
Example 4
Source File: ObjectStreamClass.java From openjdk-jdk9 with GNU General Public License v2.0 | 5 votes |
private void setObjFieldValues(Object obj, Object[] vals, boolean dryRun) { if (obj == null) { throw new NullPointerException(); } for (int i = numPrimFields; i < fields.length; i++) { long key = writeKeys[i]; if (key == Unsafe.INVALID_FIELD_OFFSET) { continue; // discard value } switch (typeCodes[i]) { case 'L': case '[': Object val = vals[offsets[i]]; if (val != null && !types[i - numPrimFields].isInstance(val)) { Field f = fields[i].getField(); throw new ClassCastException( "cannot assign instance of " + val.getClass().getName() + " to field " + f.getDeclaringClass().getName() + "." + f.getName() + " of type " + f.getType().getName() + " in instance of " + obj.getClass().getName()); } if (!dryRun) unsafe.putObject(obj, key, val); break; default: throw new InternalError(); } } }
Example 5
Source File: ObjectStreamClass.java From Bytecoder with Apache License 2.0 | 4 votes |
/** * Sets the serializable primitive fields of object obj using values * unmarshalled from byte array buf starting at offset 0. The caller * is responsible for ensuring that obj is of the proper type. */ void setPrimFieldValues(Object obj, byte[] buf) { if (obj == null) { throw new NullPointerException(); } for (int i = 0; i < numPrimFields; i++) { long key = writeKeys[i]; if (key == Unsafe.INVALID_FIELD_OFFSET) { continue; // discard value } int off = offsets[i]; switch (typeCodes[i]) { case 'Z': unsafe.putBoolean(obj, key, Bits.getBoolean(buf, off)); break; case 'B': unsafe.putByte(obj, key, buf[off]); break; case 'C': unsafe.putChar(obj, key, Bits.getChar(buf, off)); break; case 'S': unsafe.putShort(obj, key, Bits.getShort(buf, off)); break; case 'I': unsafe.putInt(obj, key, Bits.getInt(buf, off)); break; case 'F': unsafe.putFloat(obj, key, Bits.getFloat(buf, off)); break; case 'J': unsafe.putLong(obj, key, Bits.getLong(buf, off)); break; case 'D': unsafe.putDouble(obj, key, Bits.getDouble(buf, off)); break; default: throw new InternalError(); } } }
Example 6
Source File: ObjectStreamClass.java From openjdk-jdk9 with GNU General Public License v2.0 | 4 votes |
/** * Sets the serializable primitive fields of object obj using values * unmarshalled from byte array buf starting at offset 0. The caller * is responsible for ensuring that obj is of the proper type. */ void setPrimFieldValues(Object obj, byte[] buf) { if (obj == null) { throw new NullPointerException(); } for (int i = 0; i < numPrimFields; i++) { long key = writeKeys[i]; if (key == Unsafe.INVALID_FIELD_OFFSET) { continue; // discard value } int off = offsets[i]; switch (typeCodes[i]) { case 'Z': unsafe.putBoolean(obj, key, Bits.getBoolean(buf, off)); break; case 'B': unsafe.putByte(obj, key, buf[off]); break; case 'C': unsafe.putChar(obj, key, Bits.getChar(buf, off)); break; case 'S': unsafe.putShort(obj, key, Bits.getShort(buf, off)); break; case 'I': unsafe.putInt(obj, key, Bits.getInt(buf, off)); break; case 'F': unsafe.putFloat(obj, key, Bits.getFloat(buf, off)); break; case 'J': unsafe.putLong(obj, key, Bits.getLong(buf, off)); break; case 'D': unsafe.putDouble(obj, key, Bits.getDouble(buf, off)); break; default: throw new InternalError(); } } }