1
2
3
4
5
6
7
8
9
10
11 package org.eclipse.jgit.lib;
12
13 import java.io.IOException;
14 import java.io.InputStream;
15
16
17
18
19 public abstract class ObjectStream extends InputStream {
20
21
22
23
24
25 public abstract int getType();
26
27
28
29
30
31
32 public abstract long getSize();
33
34
35
36
37
38
39
40
41 public static class SmallStream extends ObjectStream {
42 private final int type;
43
44 private final byte[] data;
45
46 private int ptr;
47
48 private int mark;
49
50
51
52
53
54
55
56 public SmallStream(ObjectLoader loader) {
57 this(loader.getType(), loader.getCachedBytes());
58 }
59
60
61
62
63
64
65
66
67
68 public SmallStream(int type, byte[] data) {
69 this.type = type;
70 this.data = data;
71 }
72
73 @Override
74 public int getType() {
75 return type;
76 }
77
78 @Override
79 public long getSize() {
80 return data.length;
81 }
82
83 @Override
84 public int available() {
85 return data.length - ptr;
86 }
87
88 @Override
89 public long skip(long n) {
90 int s = (int) Math.min(available(), Math.max(0, n));
91 ptr += s;
92 return s;
93 }
94
95 @Override
96 public int read() {
97 if (ptr == data.length)
98 return -1;
99 return data[ptr++] & 0xff;
100 }
101
102 @Override
103 public int read(byte[] b, int off, int len) {
104 if (ptr == data.length)
105 return -1;
106 int n = Math.min(available(), len);
107 System.arraycopy(data, ptr, b, off, n);
108 ptr += n;
109 return n;
110 }
111
112 @Override
113 public boolean markSupported() {
114 return true;
115 }
116
117 @Override
118 public void mark(int readlimit) {
119 mark = ptr;
120 }
121
122 @Override
123 public void reset() {
124 ptr = mark;
125 }
126 }
127
128
129
130
131
132
133
134 public static class Filter extends ObjectStream {
135 private final int type;
136
137 private final long size;
138
139 private final InputStream in;
140
141
142
143
144
145
146
147
148
149
150
151
152
153 public Filter(int type, long size, InputStream in) {
154 this.type = type;
155 this.size = size;
156 this.in = in;
157 }
158
159 @Override
160 public int getType() {
161 return type;
162 }
163
164 @Override
165 public long getSize() {
166 return size;
167 }
168
169 @Override
170 public int available() throws IOException {
171 return in.available();
172 }
173
174 @Override
175 public long skip(long n) throws IOException {
176 return in.skip(n);
177 }
178
179 @Override
180 public int read() throws IOException {
181 return in.read();
182 }
183
184 @Override
185 public int read(byte[] b, int off, int len) throws IOException {
186 return in.read(b, off, len);
187 }
188
189 @Override
190 public boolean markSupported() {
191 return in.markSupported();
192 }
193
194 @Override
195 public void mark(int readlimit) {
196 in.mark(readlimit);
197 }
198
199 @Override
200 public void reset() throws IOException {
201 in.reset();
202 }
203
204 @Override
205 public void close() throws IOException {
206 in.close();
207 }
208 }
209 }