--- a/jdk/src/share/classes/java/io/ObjectOutputStream.java Thu Feb 06 12:24:42 2014 +0000
+++ b/jdk/src/share/classes/java/io/ObjectOutputStream.java Thu Feb 06 14:45:12 2014 +0000
@@ -35,7 +35,6 @@
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentMap;
import static java.io.ObjectStreamClass.processQueue;
-import java.io.SerialCallbackContext;
import sun.reflect.misc.ReflectUtil;
/**
@@ -458,7 +457,7 @@
if (ctx == null) {
throw new NotActiveException("not in call to writeObject");
}
- Object curObj = ctx.getObj();
+ ctx.checkAndSetUsed();
ObjectStreamClass curDesc = ctx.getDesc();
curPut = new PutFieldImpl(curDesc);
}
@@ -1527,29 +1526,34 @@
desc.checkDefaultSerialize();
int primDataSize = desc.getPrimDataSize();
- if (primVals == null || primVals.length < primDataSize) {
- primVals = new byte[primDataSize];
+ if (primDataSize > 0) {
+ if (primVals == null || primVals.length < primDataSize) {
+ primVals = new byte[primDataSize];
+ }
+ desc.getPrimFieldValues(obj, primVals);
+ bout.write(primVals, 0, primDataSize, false);
}
- desc.getPrimFieldValues(obj, primVals);
- bout.write(primVals, 0, primDataSize, false);
- ObjectStreamField[] fields = desc.getFields(false);
- Object[] objVals = new Object[desc.getNumObjFields()];
- int numPrimFields = fields.length - objVals.length;
- desc.getObjFieldValues(obj, objVals);
- for (int i = 0; i < objVals.length; i++) {
- if (extendedDebugInfo) {
- debugInfoStack.push(
- "field (class \"" + desc.getName() + "\", name: \"" +
- fields[numPrimFields + i].getName() + "\", type: \"" +
- fields[numPrimFields + i].getType() + "\")");
- }
- try {
- writeObject0(objVals[i],
- fields[numPrimFields + i].isUnshared());
- } finally {
+ int numObjFields = desc.getNumObjFields();
+ if (numObjFields > 0) {
+ ObjectStreamField[] fields = desc.getFields(false);
+ Object[] objVals = new Object[numObjFields];
+ int numPrimFields = fields.length - objVals.length;
+ desc.getObjFieldValues(obj, objVals);
+ for (int i = 0; i < objVals.length; i++) {
if (extendedDebugInfo) {
- debugInfoStack.pop();
+ debugInfoStack.push(
+ "field (class \"" + desc.getName() + "\", name: \"" +
+ fields[numPrimFields + i].getName() + "\", type: \"" +
+ fields[numPrimFields + i].getType() + "\")");
+ }
+ try {
+ writeObject0(objVals[i],
+ fields[numPrimFields + i].isUnshared());
+ } finally {
+ if (extendedDebugInfo) {
+ debugInfoStack.pop();
+ }
}
}
}
@@ -2464,7 +2468,9 @@
StringBuilder buffer = new StringBuilder();
if (!stack.isEmpty()) {
for(int i = stack.size(); i > 0; i-- ) {
- buffer.append(stack.get(i-1) + ((i != 1) ? "\n" : ""));
+ buffer.append(stack.get(i - 1));
+ if (i != 1)
+ buffer.append('\n');
}
}
return buffer.toString();