1313import java .util .*;
1414import java .util .function .BiConsumer ;
1515import java .util .logging .Level ;
16+ import java .util .zip .GZIPInputStream ;
1617import java .util .zip .GZIPOutputStream ;
1718
1819/**
@@ -206,13 +207,14 @@ public static VirtualInventory deserialize(InputStream in) {
206207 int dataVersion = din .readInt ();
207208 int size = din .readInt ();
208209 var itemsMask = BitSet .valueOf (din .readNBytes ((size + 7 ) / 8 )); // ceil(size / 8)
210+ var itemsIn = new BufferedInputStream (new GZIPInputStream (din ));
209211
210212 items = new ItemStack [size ];
211213 for (int i = 0 ; i < size ; i ++) {
212214 if (!itemsMask .get (i ))
213215 continue ;
214216
215- items [i ] = DataUtils .deserializeItemStack (dataVersion , din );
217+ items [i ] = DataUtils .deserializeItemStack (dataVersion , itemsIn );
216218 }
217219 }
218220
@@ -257,7 +259,7 @@ public void serialize(OutputStream out) {
257259
258260 var itemMask = new BitSet (items .length );
259261 var itemsBin = new ByteArrayOutputStream ();
260- var itemsOut = new GZIPOutputStream (itemsBin );
262+ var itemsOut = new BufferedOutputStream ( new GZIPOutputStream (itemsBin ) );
261263
262264 for (int i = 0 ; i < items .length ; i ++) {
263265 var itemStack = items [i ];
@@ -268,7 +270,8 @@ public void serialize(OutputStream out) {
268270 DataUtils .serializeItemStack (itemStack , itemsOut );
269271 }
270272
271- dos .write (itemMask .toByteArray ());
273+ itemsOut .close ();
274+ dos .write (Arrays .copyOf (itemMask .toByteArray (), (items .length + 7 ) / 8 )); // ceil(size / 8)
272275 dos .write (itemsBin .toByteArray ());
273276
274277 dos .flush ();
0 commit comments