- byte valueType = input.readByte();
- if (valueType == TokenTypes.IS_CODE_VALUE) {
- return codedStringMap.get(input.readInt());
- } else if (valueType == TokenTypes.IS_STRING_VALUE) {
- String value = input.readUTF().intern();
- codedStringMap.put(codedStringMap.size(), value);
- return value;
+ final byte valueType = input.readByte();
+ switch (valueType) {
+ case TokenTypes.IS_NULL_VALUE:
+ return null;
+ case TokenTypes.IS_CODE_VALUE:
+ final int code = input.readInt();
+ try {
+ return codedStringMap.get(code);
+ } catch (IndexOutOfBoundsException e) {
+ throw new IOException("String code " + code + " was not found", e);
+ }
+ case TokenTypes.IS_STRING_VALUE:
+ final String value = input.readUTF().intern();
+ codedStringMap.add(value);
+ return value;
+ default:
+ throw new IOException("Unhandled string value type " + valueType);