I need to get a hashmap from a hex string I’ve serialized. Currently, I can get the hashmap, but it creates an EOFException.
private static String
writeMaterialMap(HashMap<String, Double> map) throws Exception {
System.out.print(map);
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
ObjectOutputStream objectOutputStream = new ObjectOutputStream(byteArrayOutputStream);objectOutputStream.writeObject(map);
objectOutputStream.close();byte[] bytes = byteArrayOutputStream.toByteArray();
final StringBuilder stringBuilder = new StringBuilder();
for (byte bytte : bytes) {
stringBuilder.append(String.format("%02x", bytte));
}System.out.print("Saving: " + stringBuilder.toString());
return stringBuilder.toString();
}@SuppressWarnings("unchecked")
private static HashMap<String, Double> readMaterialMap(String hex) throws Exception {int length = hex.length();
byte[] byteArray = new byte[length / 2];
for (int i = 0; i < length; i += 2) {
byteArray[i / 2] = (byte) ((Character.digit(hex.charAt(i), 16) << 4)
+ Character.digit(hex.charAt(i + 1), 16));
}ObjectInputStream objectInputStream = new ObjectInputStream(new ByteArrayInputStream(byteArray));
System.out.print(objectInputStream.readObject());HashMap<String, Double> materials = new HashMap<>((Map<String, Double>) objectInputStream.readObject());
System.out.print(materials);
return materials;
}
Currently, I get this:
{"A"=1}
{}
java.io.EOFException
at java.io.ObjectInputStream$BlockDataInputStream.peekByte
at java.io.ObjectInputStream.readObject0
at java.io.ObjectInputStream.readObject
at me.MapHex.readMaterialMap(MineHex.java:66)
What I can see from this is: It can read the object, but the EOFE is preventing me from casting it to a HashMap. I need to cast it to a HashMap without an EOFE