1 | sclass InflaterInputStream_relaxed extends InflaterInputStream { |
2 | *(InputStream in, Inflater inf, int size) { |
3 | super(in, inf, sizee); |
4 | } |
5 | |
6 | *(InputStream in, Inflater inf) { |
7 | super(in, inf); |
8 | } |
9 | |
10 | *(InputStream in) { |
11 | super(in); |
12 | } |
13 | |
14 | public int read(byte[] b, int off, int len) throws IOException { |
15 | ensureOpen(); |
16 | if (b == null) { |
17 | throw new NullPointerException(); |
18 | } else if (off < 0 || len < 0 || len > b.length - off) { |
19 | throw new IndexOutOfBoundsException(); |
20 | } else if (len == 0) { |
21 | return 0; |
22 | } |
23 | try { |
24 | int n; |
25 | while ((n = inf.inflate(b, off, len)) == 0) { |
26 | if (inf.finished() || inf.needsDictionary()) { |
27 | reachEOF = true; |
28 | return -1; |
29 | } |
30 | if (inf.needsInput()) { |
31 | if (!fill2()) |
32 | ret -1; |
33 | } |
34 | } |
35 | return n; |
36 | } catch (DataFormatException e) { |
37 | String s = e.getMessage(); |
38 | throw new ZipException(s != null ? s : "Invalid ZLIB data format"); |
39 | } |
40 | } |
41 | |
42 | /** |
43 | * Returns 0 after EOF has been reached, otherwise always return 1. |
44 | * <p> |
45 | * Programs should not count on this method to return the actual number |
46 | * of bytes that could be read without blocking. |
47 | * |
48 | * @return 1 before EOF and 0 after EOF. |
49 | * @throws IOException if an I/O error occurs. |
50 | * |
51 | */ |
52 | public int available() throws IOException { |
53 | ensureOpen(); |
54 | if (reachEOF) { |
55 | return 0; |
56 | } else if (inf.finished()) { |
57 | // the end of the compressed data stream has been reached |
58 | reachEOF = true; |
59 | return 0; |
60 | } else { |
61 | return 1; |
62 | } |
63 | } |
64 | |
65 | private byte[] b = new byte[512]; |
66 | |
67 | /** |
68 | * Skips specified number of bytes of uncompressed data. |
69 | * @param n the number of bytes to skip |
70 | * @return the actual number of bytes skipped. |
71 | * @throws IOException if an I/O error has occurred |
72 | * @throws IllegalArgumentException if {@code n < 0} |
73 | */ |
74 | public long skip(long n) throws IOException { |
75 | if (n < 0) { |
76 | throw new IllegalArgumentException("negative skip length"); |
77 | } |
78 | ensureOpen(); |
79 | int max = (int)Math.min(n, Integer.MAX_VALUE); |
80 | int total = 0; |
81 | while (total < max) { |
82 | int len = max - total; |
83 | if (len > b.length) { |
84 | len = b.length; |
85 | } |
86 | len = read(b, 0, len); |
87 | if (len == -1) { |
88 | reachEOF = true; |
89 | break; |
90 | } |
91 | total += len; |
92 | } |
93 | return total; |
94 | } |
95 | |
96 | /** |
97 | * Fills input buffer with more data to decompress. |
98 | * @throws IOException if an I/O error has occurred |
99 | * @return true when not at end of stream |
100 | */ |
101 | protected bool fill2() throws IOException { |
102 | ensureOpen(); |
103 | len = in.read(buf, 0, buf.length); |
104 | if (len == -1) |
105 | false; |
106 | inf.setInput(buf, 0, len); |
107 | true; |
108 | } |
109 | } |
download show line numbers debug dex old transpilations
Travelled to 4 computer(s): bhatertpkbcr, mqqgnosmbjvj, pyentgdyhuwx, vouqrxazstgt
No comments. add comment
Snippet ID: | #1031085 |
Snippet name: | InflaterInputStream_relaxed - InflaterInputStream that allows incomplete files [abandoned version] |
Eternal ID of this version: | #1031085/2 |
Text MD5: | faee426cd57fcc4b87107f378f2450db |
Author: | stefan |
Category: | javax |
Type: | JavaX fragment (include) |
Public (visible to everyone): | Yes |
Archived (hidden from active list): | No |
Created/modified: | 2021-05-01 00:19:49 |
Source code size: | 3065 bytes / 109 lines |
Pitched / IR pitched: | No / No |
Views / Downloads: | 176 / 204 |
Version history: | 1 change(s) |
Referenced in: | [show references] |