Skip to content

Instantly share code, notes, and snippets.

@nitsanw
Created October 31, 2012 17:47
Show Gist options
  • Save nitsanw/3988619 to your computer and use it in GitHub Desktop.
Save nitsanw/3988619 to your computer and use it in GitHub Desktop.
Using Unsafe to break encapsulation - step 3
public final static String buildUnsafe(char[] chars){
String mutable = new String();// an empty string to hack
UnsafeAccess.unsafe.putObject(mutable,valueFieldOffset,chars);
UnsafeAccess.unsafe.putInt(mutable,countFieldOffset,chars.length);
return mutable;
}
public final static String buildUnsafe(char[] chars, int offset, int length){
String mutable = new String();// an empty string to hack
UnsafeAccess.unsafe.putObject(mutable,valueFieldOffset,chars);
UnsafeAccess.unsafe.putInt(mutable,countFieldOffset,length);
UnsafeAccess.unsafe.putInt(mutable,offsetFieldOffset,offset);
return mutable;
}
public final static char[] getChars(String s){
return (char[])UnsafeAccess.unsafe.getObject(s,valueFieldOffset);
}
public final static int getOffset(String s){
return UnsafeAccess.unsafe.getInt(s,offsetFieldOffset);
}
@nitsanw
Copy link
Author

nitsanw commented Nov 1, 2012

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment