Mercurial Hosting > luan
annotate src/goodjava/io/FixedLengthInputStream.java @ 2021:b8e5d53c4fc9
admin monitors scheduler
| author | Franklin Schmidt <fschmidt@gmail.com> | 
|---|---|
| date | Mon, 20 Oct 2025 14:45:27 -0600 | 
| parents | 91c167099462 | 
| children | 
| rev | line source | 
|---|---|
| 1480 | 1 package goodjava.io; | 
| 1490 
9a2a2181a58f
FixedLengthInputStream
 Franklin Schmidt <fschmidt@gmail.com> parents: 
1480diff
changeset | 2 | 
| 1480 | 3 import java.io.InputStream; | 
| 4 import java.io.IOException; | |
| 1490 
9a2a2181a58f
FixedLengthInputStream
 Franklin Schmidt <fschmidt@gmail.com> parents: 
1480diff
changeset | 5 import java.io.EOFException; | 
| 1480 | 6 | 
| 7 | |
| 1494 | 8 public class FixedLengthInputStream extends NoMarkInputStream { | 
| 1490 
9a2a2181a58f
FixedLengthInputStream
 Franklin Schmidt <fschmidt@gmail.com> parents: 
1480diff
changeset | 9 protected long left; | 
| 1480 | 10 | 
| 1490 
9a2a2181a58f
FixedLengthInputStream
 Franklin Schmidt <fschmidt@gmail.com> parents: 
1480diff
changeset | 11 public FixedLengthInputStream(InputStream in, long len) { | 
| 1480 | 12 super(in); | 
| 1490 
9a2a2181a58f
FixedLengthInputStream
 Franklin Schmidt <fschmidt@gmail.com> parents: 
1480diff
changeset | 13 if( len < 0 ) | 
| 
9a2a2181a58f
FixedLengthInputStream
 Franklin Schmidt <fschmidt@gmail.com> parents: 
1480diff
changeset | 14 throw new IllegalArgumentException("len can't be negative"); | 
| 
9a2a2181a58f
FixedLengthInputStream
 Franklin Schmidt <fschmidt@gmail.com> parents: 
1480diff
changeset | 15 this.left = len; | 
| 1480 | 16 } | 
| 17 | |
| 1494 | 18 public int read() throws IOException { | 
| 1490 
9a2a2181a58f
FixedLengthInputStream
 Franklin Schmidt <fschmidt@gmail.com> parents: 
1480diff
changeset | 19 if( left == 0 ) | 
| 1480 | 20 return -1; | 
| 1494 | 21 int n = in.read(); | 
| 1490 
9a2a2181a58f
FixedLengthInputStream
 Franklin Schmidt <fschmidt@gmail.com> parents: 
1480diff
changeset | 22 if( n == -1 ) | 
| 
9a2a2181a58f
FixedLengthInputStream
 Franklin Schmidt <fschmidt@gmail.com> parents: 
1480diff
changeset | 23 throw new EOFException(); | 
| 
9a2a2181a58f
FixedLengthInputStream
 Franklin Schmidt <fschmidt@gmail.com> parents: 
1480diff
changeset | 24 left--; | 
| 1480 | 25 return n; | 
| 26 } | |
| 27 | |
| 1494 | 28 public int read(byte[] b, int off, int len) throws IOException { | 
| 1490 
9a2a2181a58f
FixedLengthInputStream
 Franklin Schmidt <fschmidt@gmail.com> parents: 
1480diff
changeset | 29 if( len == 0 ) | 
| 
9a2a2181a58f
FixedLengthInputStream
 Franklin Schmidt <fschmidt@gmail.com> parents: 
1480diff
changeset | 30 return 0; | 
| 
9a2a2181a58f
FixedLengthInputStream
 Franklin Schmidt <fschmidt@gmail.com> parents: 
1480diff
changeset | 31 if( left == 0 ) | 
| 1480 | 32 return -1; | 
| 1490 
9a2a2181a58f
FixedLengthInputStream
 Franklin Schmidt <fschmidt@gmail.com> parents: 
1480diff
changeset | 33 if( len > left ) | 
| 
9a2a2181a58f
FixedLengthInputStream
 Franklin Schmidt <fschmidt@gmail.com> parents: 
1480diff
changeset | 34 len = (int)left; | 
| 1494 | 35 int n = in.read(b,off,len); | 
| 1490 
9a2a2181a58f
FixedLengthInputStream
 Franklin Schmidt <fschmidt@gmail.com> parents: 
1480diff
changeset | 36 if( n == -1 ) | 
| 
9a2a2181a58f
FixedLengthInputStream
 Franklin Schmidt <fschmidt@gmail.com> parents: 
1480diff
changeset | 37 throw new EOFException(); | 
| 
9a2a2181a58f
FixedLengthInputStream
 Franklin Schmidt <fschmidt@gmail.com> parents: 
1480diff
changeset | 38 left -= n; | 
| 1480 | 39 return n; | 
| 40 } | |
| 41 | |
| 1494 | 42 public long skip(long n) throws IOException { | 
| 1490 
9a2a2181a58f
FixedLengthInputStream
 Franklin Schmidt <fschmidt@gmail.com> parents: 
1480diff
changeset | 43 if( n > left ) | 
| 
9a2a2181a58f
FixedLengthInputStream
 Franklin Schmidt <fschmidt@gmail.com> parents: 
1480diff
changeset | 44 n = left; | 
| 
9a2a2181a58f
FixedLengthInputStream
 Franklin Schmidt <fschmidt@gmail.com> parents: 
1480diff
changeset | 45 n = in.skip(n); | 
| 
9a2a2181a58f
FixedLengthInputStream
 Franklin Schmidt <fschmidt@gmail.com> parents: 
1480diff
changeset | 46 left -= n; | 
| 1480 | 47 return n; | 
| 48 } | |
| 49 | |
| 1494 | 50 public int available() throws IOException { | 
| 1490 
9a2a2181a58f
FixedLengthInputStream
 Franklin Schmidt <fschmidt@gmail.com> parents: 
1480diff
changeset | 51 int n = in.available(); | 
| 
9a2a2181a58f
FixedLengthInputStream
 Franklin Schmidt <fschmidt@gmail.com> parents: 
1480diff
changeset | 52 if( n > left ) | 
| 
9a2a2181a58f
FixedLengthInputStream
 Franklin Schmidt <fschmidt@gmail.com> parents: 
1480diff
changeset | 53 n = (int)left; | 
| 1480 | 54 return n; | 
| 55 } | |
| 56 | |
| 57 } | 
