diff --git a/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/collection/CollectionSerializer.java b/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/collection/CollectionSerializer.java index 95bd279c3..144cb68a4 100644 --- a/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/collection/CollectionSerializer.java +++ b/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/collection/CollectionSerializer.java @@ -137,7 +137,7 @@ public class CollectionSerializer { } Map extraInformation = collection.getExtraInformation(); - JSONObject json= new JSONObject(); + JSONObject json = new JSONObject(); json.putAll(extraInformation); OutputStreamWriter writer = new OutputStreamWriter(outputStream, "UTF-8"); @@ -168,7 +168,7 @@ public class CollectionSerializer { DefaultCardCollection collection = new DefaultCardCollection(); byte[] packs = new byte[packTypes]; - int read = inputStream.read(packs); + int read = readWholeArray(inputStream, packs); if (read != packTypes) throw new IllegalStateException("Under-read the packs information"); for (int i = 0; i < packs.length; i++) @@ -177,7 +177,7 @@ public class CollectionSerializer { int cardBytes = convertToInt(inputStream.read(), inputStream.read()); byte[] cards = new byte[cardBytes]; - read = inputStream.read(cards); + read = readWholeArray(inputStream, cards); if (read != cardBytes) throw new IllegalArgumentException("Under-read the cards information"); for (int i = 0; i < cards.length; i++) @@ -202,7 +202,7 @@ public class CollectionSerializer { collection.addCurrency(currency); byte[] packs = new byte[packTypes]; - int read = inputStream.read(packs); + int read = readWholeArray(inputStream, packs); if (read != packTypes) throw new IllegalStateException("Under-read the packs information"); for (int i = 0; i < packs.length; i++) @@ -211,7 +211,7 @@ public class CollectionSerializer { int cardBytes = convertToInt(inputStream.read(), inputStream.read()); byte[] cards = new byte[cardBytes]; - read = inputStream.read(cards); + read = readWholeArray(inputStream, cards); if (read != cardBytes) throw new IllegalArgumentException("Under-read the cards information"); for (int i = 0; i < cards.length; i++) @@ -237,7 +237,7 @@ public class CollectionSerializer { byte[] packs = new byte[packTypes * 2]; - int read = inputStream.read(packs); + int read = readWholeArray(inputStream, packs); if (read != packTypes * 2) throw new IllegalStateException("Under-read the packs information"); for (int i = 0; i < packTypes; i++) { @@ -248,7 +248,7 @@ public class CollectionSerializer { int cardBytes = convertToInt(inputStream.read(), inputStream.read()); byte[] cards = new byte[cardBytes]; - read = inputStream.read(cards); + read = readWholeArray(inputStream, cards); if (read != cardBytes) throw new IllegalArgumentException("Under-read the cards information"); for (int i = 0; i < cards.length; i++) @@ -273,7 +273,7 @@ public class CollectionSerializer { byte[] packs = new byte[packTypes * 2]; - int read = inputStream.read(packs); + int read = readWholeArray(inputStream, packs); if (read != packTypes * 2) throw new IllegalStateException("Under-read the packs information"); for (int i = 0; i < packTypes; i++) { @@ -284,7 +284,7 @@ public class CollectionSerializer { int cardBytes = convertToInt(inputStream.read(), inputStream.read()); byte[] cards = new byte[cardBytes]; - read = inputStream.read(cards); + read = readWholeArray(inputStream, cards); if (read != cardBytes) throw new IllegalArgumentException("Under-read the cards information"); for (int i = 0; i < cards.length; i++) { @@ -311,7 +311,7 @@ public class CollectionSerializer { byte[] packs = new byte[packTypes * 2]; - int read = inputStream.read(packs); + int read = readWholeArray(inputStream, packs); if (read != packTypes * 2) throw new IllegalStateException("Under-read the packs information"); for (int i = 0; i < packTypes; i++) { @@ -322,7 +322,7 @@ public class CollectionSerializer { int cardBytes = convertToInt(inputStream.read(), inputStream.read()); byte[] cards = new byte[cardBytes]; - read = inputStream.read(cards); + read = readWholeArray(inputStream, cards); if (read != cardBytes) throw new IllegalArgumentException("Under-read the cards information"); for (int i = 0; i < cards.length; i++) { @@ -361,4 +361,16 @@ public class CollectionSerializer { for (int i = 0; i < byteCount; i++) outputStream.write((value >> (8 * (byteCount - i - 1))) & 0x000000ff); } + + private static int readWholeArray(InputStream stream, byte[] array) throws IOException { + int readCount = 0; + while (true) { + int readAmount = stream.read(array, readCount, array.length - readCount); + if (readAmount < 0) + return readCount; + readCount += readAmount; + if (readCount == array.length) + return readCount; + } + } }