diff options
-rw-r--r-- | src/org/jetbrains/java/decompiler/util/InterpreterUtil.java | 28 |
1 files changed, 13 insertions, 15 deletions
diff --git a/src/org/jetbrains/java/decompiler/util/InterpreterUtil.java b/src/org/jetbrains/java/decompiler/util/InterpreterUtil.java index 0644b69..dfd8b75 100644 --- a/src/org/jetbrains/java/decompiler/util/InterpreterUtil.java +++ b/src/org/jetbrains/java/decompiler/util/InterpreterUtil.java @@ -62,29 +62,27 @@ public class InterpreterUtil { } public static byte[] getBytes(ZipFile archive, ZipEntry entry) throws IOException { - return readAndClose(archive.getInputStream(entry), entry.getSize()); + return readAndClose(archive.getInputStream(entry), (int)entry.getSize()); } public static byte[] getBytes(File file) throws IOException { - return readAndClose(new FileInputStream(file), file.length()); + return readAndClose(new FileInputStream(file), (int)file.length()); } - private static byte[] readAndClose(InputStream stream, long length) throws IOException { - + private static byte[] readAndClose(InputStream stream, int length) throws IOException { try { - byte[] bytes = new byte[(int) length]; - DataInputStream dataStream = new DataInputStream(stream); - - try { - dataStream.readFully(bytes); - } catch (EOFException ex) { - throw new IOException("premature end of stream", ex); - } finally { - dataStream.close(); + byte[] bytes = new byte[length]; + int n = 0, off = 0; + while (n < length) { + int count = stream.read(bytes, off + n, length - n); + if (count < 0) { + throw new IOException("premature end of stream"); + } + n += count; } - return bytes; - } finally { + } + finally { stream.close(); } } |